2016-04-28 234 views
1

我知道我可以使用Azure CLI来实现这一点,但我想使用常见的Linux/Unix命令。使用wget或curl下载带共享访问签名的Azure Blob

我有一个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返回退出统计8( “服务器发出错误响应”)。

+0

喜的性质,做我的回答帮助? –

+0

谢谢你的回答@步锁定。按照您的建议尝试添加'st','se'和'sp',但错误信息是相同的('HTTP/1.1 404指定的资源不存在.')。它仍然令我困惑,因为网页浏览器没有困难使用完全相同的URL下载文件。 – numeratus

+0

我已添加更新。它看起来像我们的cmd行之间的关键差异导致错误 - 你不引用网址。当我不引用URL时,它也会生成404错误 –

回答

5

查询难以调试没有细节,但...

我可以在容器级别,可以让我在存储

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"

读取文件如果我创建一个SAS在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
  • SIG

此致似乎缺少se组分,它是到期日。

您必须确保使wget的呼叫时,URL被封闭在讲话标记由于一些URL编码

+0

要清楚:这个工作的原因是因为引用了URL。我不知道它是否与需要引号的问号/&符号有关,但我怀疑它与Azure无关。 – numeratus

相关问题