【问题标题】:Download Azure Blob with Shared Access Signature using wget or curl使用 wget 或 curl 下载带有共享访问签名的 Azure Blob
【发布时间】:2016-08-23 23:10:47
【问题描述】:

我知道我可以使用 Azure CLI 来完成此操作,但我想使用常见的 Linux/Unix 命令。

我有一个私有的 Azure Blob 容器。我们称之为https://my-account.blob.core.windows.net/my-blob-container/my-file.my-extension

如果我的容器设置为“仅限 Blob 的公共读取访问”,那么一切正常。

$ wget https://my-account.blob.core.windows.net/my-blob-container/my-file.my-extension
--2016-04-28 16:11:15-- https://my-account.blob.core.windows.net/my-blob-container/my-file.my-extension
Resolving my-account.blob.core.windows.net (my-account.blob.core.windows.net)... 4.11.2.14
Connecting to my-account.blob.core.windows.net (my-account.blob.core.windows.net)|4.11.2.14|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 21682 (21K) [application/octet-stream]
Saving to: ‘my-file.my-extension’

如果我的容器设置为“无公共访问权限”,并且我创建了一个名为 my-policy 的访问策略,并使用读/写/删除/列表一年,我会得到以下直接链接:https://my-account.blob.core.windows.net/my-blob-container/my-file.my-extension?sv=2015-02-21&si=my-policy&sr=b&sig=y%2B2pvIuR9rGQdvm%2FQKp0xNCWE%2B1G%2F2IqjHkWMhRcPUA%3D

如果我将链接复制到浏览器中,文件会自动下载。如果我使用wget,我会收到 404 错误:

$ wget https://my-account.blob.core.windows.net/my-blob-container/my-file.my-extension?sv=2015-02-21&si=my-policy&sr=b&sig=y%2B2pvIuR9rGQdvm%2FQKp0xNCWE%2B1G%2F2IqjHkWMhRcPUA%3D
[4] 14106
[5] 14107
[6] 14108
[2]   Done                    si=my-policy
[3]   Done                    sr=b
$ --2016-04-29 01:25:54--  https://my-account.blob.core.windows.net/my-blob-container/my-file.my-extension?sv=2015-02-21
Resolving my-account.blob.core.windows.net (my-account.blob.core.windows.net)... 4.11.2.14
Connecting to my-account.blob.core.windows.net (my-account.blob.core.windows.net)|4.11.2.14|:443... connected.
HTTP request sent, awaiting response... 404 The specified resource does not exist.
2016-04-29 01:25:54 ERROR 404: The specified resource does not exist..

wget 返回 Exit Stats 8(“服务器发出错误响应”)。

【问题讨论】:

  • 嗨,我的回答有帮助吗?
  • 感谢您的回答@step-locke。我已尝试按照您的建议添加stsesp,但错误消息是相同的(HTTP/1.1 404 The specified resource does not exist.)。它仍然让我感到困惑,因为网络浏览器可以轻松下载具有完全相同 URL 的文件。
  • 我添加了一个更新。看起来我们的 cmd 行之间的关键差异导致了错误 - 你没有引用 url。当我不引用 URL 时,它也会生成 404 错误
  • 你是对的;只要引用了 URL,一切正常。感谢您的帮助!
  • 有时您只需将地址放在引号中(“https:// ....”)

标签: curl wget azure-blob-storage


【解决方案1】:

如果没有具体细节,查询很难调试,但是...

由于某些 URL 编码的性质,在进行 wget 调用时,您必须确保 URL 包含在语音标记中(如果您正在执行 curl,则相同) )

我可以在容器级别创建一个 SAS,让我可以读取存储中的文件

wget "https://azurerpkg.blob.core.windows.net/azurer/doggies.jpg?st=2016-06-06T07%3A56%3A00Z&se=2018-06-07T07%3A56%3A00Z&sp=rl&sv=2015-04-05&sr=c&sig=nKQz5BcWoUaASBzSW7Hv0TzfMbTFcf0f%2B5mMtmTwQ2A%3D" -k -O "doggies.jpg"

如果我在 blob 级别创建特定的 SAS,我的 wget 也可以工作

wget "https://azurerpkg.blob.core.windows.net/azurer/doggies.jpg?st=2016-06-06T07%3A56%3A00Z&se=2018-06-07T07%3A56%3A00Z&sp=rl&sv=2015-04-05&sr=b&sig=ntNFXS6fUlHVkiqoqj2rHg1Pw6gSNosnYqj3CQ6GIrg%3D" -k -O doggies.jpg

有效的共享访问签名查询字符串需要以下参数的参数:

  • st
  • se
  • sp
  • sr
  • 信号

您的似乎缺少se 组件,这是到期日期。

【讨论】:

  • 要明确:这样做的原因是引用了 URL。我不知道它是否与需要引号的问号/&符号有关,但我怀疑它与 Azure 无关。
猜你喜欢
  • 1970-01-01
  • 2021-08-13
  • 1970-01-01
  • 1970-01-01
  • 2022-10-21
  • 1970-01-01
  • 2018-09-02
  • 2013-12-31
  • 2017-08-24
相关资源
最近更新 更多