通过直接 URL 浏览时上传到 Azure Blob 存储的图像不可用
Posted
技术标签:
【中文标题】通过直接 URL 浏览时上传到 Azure Blob 存储的图像不可用【英文标题】:Images uploaded to Azure blob storage unavailable when browsing by direct URL 【发布时间】:2019-12-24 11:23:40 【问题描述】:我已将一些图像上传到 StorageV2(通用 v2)类型的 Azure 存储帐户上的 Blob 容器。
这些是通过编程方式上传的。这是我使用的代码:
public Task CopyFile(string fileName, string targetPath)
var blobRef = Container.GetBlockBlobReference(targetPath);
blobRef.Properties.ContentType = GetContentType(fileName);
return blobRef.UploadFromFileAsync(fileName);
public string GetContentType(string fileName)
var provider = new FileExtensionContentTypeProvider();
if (!provider.TryGetContentType(fileName, out var contentType))
contentType = "application/octet-stream";
return contentType;
Container
是一个初始化的CloudBlobContainer
实例。
当我使用存储资源管理器时,我可以看到上传的文件。如果我查看任何文件的属性,它会列出一个 Uri 属性。但是,如果我复制值(一个 URL)并粘贴到浏览器中,我会看到以下错误页面:
<Error>
<Code>ResourceNotFound</Code>
<Message>
The specified resource does not exist. RequestId:12485818-601e-0017-6f69-56c3df000000 Time:2019-08-19T08:35:13.2123849Z
</Message>
</Error>
但如果我在存储资源管理器中双击该文件,它会正确下载图像。据我所知,它使用的 URL 与我之前复制的 URL 相同,除了一些额外的查询字符串如下所示:?sv=2018-03-28&ss=bqtf&srt=sco&sp=rwdlacup&se=2019-08-19T16:49:38Z&sig=%2FJs7VnGKsjplalKXCcl0XosgUkPWJccg0qdvCSZlDSs%3D&_=1566204636804
我认为这一定意味着我的 blob 不是公开可用的,但我找不到任何可以让我的图像在其已知 URI 上公开可用的设置。谁能在这里指出我正确的方向?谢谢。
【问题讨论】:
您能告诉我您的存储容器访问级别吗?更多详情请参考docs.microsoft.com/en-us/azure/storage/blobs/…。 【参考方案1】:检查为您的容器设置的访问级别。 如果那是 Private 那么您将遇到您遇到的错误:ResourceNotFound
【讨论】:
谢谢。不幸的是,@test123 打败了你! 是的,尤其是通过复制我的图像,这是肮脏的方式 @getsetcode,你应该标记安东的答案,如果有人复制别人的答案不好。 不确定这里发生了什么。当我第一次看到回复时,它看起来像是 test123 最先发布的。我也不记得他/她的回答包含图像。我想也许他们在我接受后将您的图像复制到他们的答案中,但现在日期戳看起来像这个答案首先出现。对此很困惑。我将把这个改成答案,如果 @test123 想对此提出异议,这里就是这样做的地方。【参考方案2】:据我所知,如果您的容器的访问级别是私有的,您使用直接 url 访问 blob,那么您将收到错误消息。如果你想访问它,你需要为它生成一个 SAS 令牌。
更多详情请参考
https://docs.microsoft.com/en-us/azure/storage/blobs/storage-manage-access-to-resources https://docs.microsoft.com/en-us/azure/storage/common/storage-sas-overview
【讨论】:
以上是关于通过直接 URL 浏览时上传到 Azure Blob 存储的图像不可用的主要内容,如果未能解决你的问题,请参考以下文章
使用java中的azure函数将文件从浏览器上传到azure blob存储
直接从前端将数据上传到 Azure Blob 存储时的安全问题