通过直接 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&amp;ss=bqtf&amp;srt=sco&amp;sp=rwdlacup&amp;se=2019-08-19T16:49:38Z&amp;sig=%2FJs7VnGKsjplalKXCcl0XosgUkPWJccg0qdvCSZlDSs%3D&amp;_=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 存储的图像不可用的主要内容,如果未能解决你的问题,请参考以下文章

直接从浏览器将文件上传到 Azure Blob 存储?

使用java中的azure函数将文件从浏览器上传到azure blob存储

直接从前端将数据上传到 Azure Blob 存储时的安全问题

从 Url 将 .vhd 作为 Page-Blob 上传到 azure-blob-storage

用于访问 Azure 存储中的私有 blob 的 URL

如何将 AppendBlob/大于 4mb 限制的文件上传到 Java 中的 Azure 存储/Blob?