来自 PUT 的 Azure Blob 存储文档中的“404 资源未找到”
Posted
技术标签:
【中文标题】来自 PUT 的 Azure Blob 存储文档中的“404 资源未找到”【英文标题】:"404 Resource Not Found" From Azure Blob Storage Document from PUT 【发布时间】:2013-08-10 22:57:04 【问题描述】:在 PUT
请求期间,使用正确的 Authorization 标头创建新的 BLOB,当我尝试将文件 PUT
放入容器时,我的进程收到“404 Resource Not Found”错误。
https://accountNameHere.blob.core.windows.net/containerNameHere
容器名和账号名都正确。
为什么会失败?
这里是原始请求标头:
PUT /testss HTTP/1.1
Host: accountName.blob.core.windows.net
Accept: */*
Connection: Keep-Alive
0: content-encoding
1: content-language
2: content-length
3: content-md5
4: content-type
5: date
6: if-modified-since
7: if-match
8: if-none-match
9: if-unmodified-since
10: range
x-ms-blob-type: BlockBlob
x-ms-version: 2011-08-18
x-ms-date: Fri, 09 Aug 2013 04:17:59 GMT
Content-Length: 126377
Authorization: SharedKey accountName:MBVLmoxzxZr+tf8EZw2GkbFLEHuNn8FNAaEHrcty/cM=
Expect: 100-continue
这是我发送的要签名的字符串:
PUT x-ms-blob-type:BlockBlob x-ms-date:Fri, 09 Aug 2013 04:03:20 GMT x-ms-version:2011-08-18 /accountName/test
这是他们所期望的:
PUT 126377 x-ms-blob-type:BlockBlob x-ms-date:Fri, 09 Aug 2013 04:02:17 GMT x-ms-version:2011-08-18 /accountName/test
两者之间的唯一区别是PUT
后面的126377
。那是文件的内容长度,我只是不知道如何删除它。
【问题讨论】:
【参考方案1】:您是否检查过 Blob 容器的安全设置?可能是您没有足够的访问权限。
【讨论】:
检查Blob service > Container > Access Policy
谢谢@Yar! ----- 我将容器的访问级别从Private (non anonymous access)
更改为Container (anonymous read access for containers and blobs)
,它对我有用。【参考方案2】:
1 - 在Azure Storage Explorer 应用程序中执行这些步骤来更改/验证访问权限。
-
右键单击相关容器的 blob
选择
Set Public Access Level
至少设置为Public read access for blobs only
。
申请。
OR 2 - 或在 Azure 门户面板中选择
Storage account
>
从Blob service
部分选择“Blob
”>
选择要更改访问权限的 Blob 或 Blob >
选择“Access policy
”>
根据您的需要从下拉菜单中选择“Blob
”或“Container
”匿名访问
【讨论】:
【参考方案3】:检查您的容器。在新门户中,单击它旁边的省略号并编辑。如果要允许列出容器,则将访问类型设置为 Blob 或 Container。
微软似乎提高了安全性,并默认将新容器设为私有。
【讨论】:
非常感谢您的回答。我一直在纠结为什么我可以在容器中看到 Blob,但无法点击 URL 并将其下载到浏览器中。访问类型“Blob”和“Container”有什么区别,你知道吗? @PhilipTenn Blob 表示 blob 是公共的,但不是容器,Container 表示容器和 blob 都是公共的......【参考方案4】:您应该使用Fiddler 来验证您是否发送了您认为的请求。然后,您可以将 Fiddler 请求与文档进行比较。
容器是否已经存在?值得使用 3rd 方存储资源管理器来验证它是否存在。
【讨论】:
刚刚安装了 Fiddler,一旦我开始使用它,我会告诉你我发现了什么。是的,容器已经存在,我手动创建的。 刚刚使用来自 Fiddler 的信息编辑了问题。感谢您对此的帮助。 想通了。 Microsoft 的 php SDK 绝对是可怕的。这真的很可怕。他们有错。我正在努力修复它,然后我将提交拉取请求。感谢您的帮助。 你能分享一下你发现了什么问题吗? 据说可以向 Azure 发送拉取请求,但不能在 SO 上分享他的解决方案。【参考方案5】:-
选择您的存储帐户
选择容器
选中容器的复选框
点击更改访问级别
-
点击更改访问级别按钮后,您将看到以下屏幕
根据您的要求更改选项。
【讨论】:
以上是关于来自 PUT 的 Azure Blob 存储文档中的“404 资源未找到”的主要内容,如果未能解决你的问题,请参考以下文章
限制来自 Blob 存储中静态网站的 Azure 函数调用?
在 Node.js 中列出来自 Azure Blob 存储和 Readstream 的 Blob