通过直接URL浏览时,上传到Azure Blob存储的图像不可用

时间:2019-08-19 08:54:02

标签: azure azure-storage azure-storage-blobs

我已将多个图像上传到类型为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实例。

使用Storage Explorer时,我可以看到上传的文件。如果我查看任何文件的属性,它将列出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>

但是,如果我在Storage Explorer中双击文件,它将正确下载映像。据我所知,它使用的URL与我之前复制的URL相同,除了一些看起来像这样的其他查询字符串:?sv=2018-03-28&ss=bqtf&srt=sco&sp=rwdlacup&se=2019-08-19T16:49:38Z&sig=%2FJs7VnGKsjplalKXCcl0XosgUkPWJccg0qdvCSZlDSs%3D&_=1566204636804

我认为这一定意味着我的Blob无法公开使用,但是我找不到任何设置可以使我的图像在其已知URI上公开可用。有人可以在这里指出正确的方向吗?谢谢。

2 个答案:

答案 0 :(得分:2)

据我所知,如果您容器的访问级别为“私有”,则使用直接URL来访问Blob,然后会收到错误消息。如果要访问它,则需要为其生成SAS令牌。 enter image description here

有关更多详细信息,请参阅

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

答案 1 :(得分:1)

检查设置为您的容器的访问级别。 如果这是私有,那么您将遇到错误:ResourceNotFound

enter image description here