来自 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 资源未找到”的主要内容,如果未能解决你的问题,请参考以下文章

Azure 存储休息 API(放置 Blob API)

限制来自 Blob 存储中静态网站的 Azure 函数调用?

在 Node.js 中列出来自 Azure Blob 存储和 Readstream 的 Blob

将文件从 Azure Blob 存储下载到 Azure Linux VM

Azure 存储 Blob 触发器未唤醒睡眠功能

Azure Blob 存储的文件大小限制?