Azure Blob 存储文档中的 "404 资源未找到" 来自 PUT。

52

在进行PUT请求时,使用正确的授权标头,创建新的BLOB,当我尝试将文件放入容器时,我的过程出现“404资源未找到”错误。

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。那是文件的内容长度,我只是不确定如何去掉它。

5个回答

40

1 - 在 Azure 存储资源管理器 应用程序中执行以下步骤以更改 / 验证访问权限。

  1. 右键单击要更改的容器的 Blob。
  2. 选择 设置公共访问级别
  3. 将其设置为至少 仅针对 blob 的公共读访问
  4. 应用更改。

图片描述


或者 2 - 或在 Azure 门户面板中选择

  • 存储帐户 >
  • Blob 服务 部分选择 "Blob" >
  • 选择您要更改访问权限的 Blob 或 Blobs >
  • 选择 "访问策略" >
  • 从下拉菜单中根据您的需求选择基于匿名访问的 "Blob" 或 "容器"。

冠军!我需要一个英雄,而你就是它。谢谢! - Logany-hi

34

您是否已检查 Blob 容器的安全设置?可能是您没有足够的访问权限。


14
查看“Blob service > 容器 > 访问策略”。 - Yar
谢谢 @Yar!-----我将容器的访问级别从“私有(非匿名访问)”更改为“容器(容器和 Blob 的匿名读取访问权限)”,这对我起作用了。 - Brendan Sluke

14

检查您的容器。在新门户中,单击其旁边的省略号并选择“编辑”。然后将访问类型设置为 Blob 或 Container,如果您想允许列出容器的话。

微软似乎增强了安全性,并默认使新容器为私有。


非常感谢您的回答。 我一直在为自己无法通过浏览器访问URL并下载容器中的Blob而苦苦挣扎。 “Blob”和“Container”的访问类型之间有什么区别,您知道吗? - Philip Tenn
@PhilipTenn Blob 意味着 Blob 是公共的,但容器不是公共的,Container 意味着容器和 Blob 都是公共的... - Stuart Dobson

1
  1. 选择您的存储账户
  2. 选择容器
  3. 勾选您的容器的复选框
  4. 点击更改访问级别

Follow 1 - 4 steps from the picture

  1. 点击更改访问级别按钮后,您将看到以下屏幕
  2. 根据您的要求更改选项。

Change the access


应该只授予用户访问权限,不允许公共访问。 - silverbackbg
只应该给用户授予权限。不应该允许公众访问。 - undefined

0

你应该使用Fiddler来验证你发送的请求是否正确。然后,你可以将Fiddler请求与文档进行比较。

容器已经存在了吗?最好使用第三方存储资源管理器来验证它是否存在。


刚刚安装了 Fiddler,一旦我启动它,我会告诉你我发现了什么。是的,容器已经存在,我手动创建了它。 - user1091949
刚刚使用 Fiddler 工具编辑了问题中的信息。感谢您对此的帮助。 - user1091949
搞定了。微软的PHP SDK真是太糟糕了,简直糟透了。他们应该为此负责。我正在努力修复它,然后将提交拉取请求。感谢您的帮助。 - user1091949
5
你能分享一下你发现了什么问题吗? - Gaurav Mantri
2
据说可以向Azure发送一个pull请求,但不能在SO上分享他的解决方案。 - Léon Pelletier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接