Azure Blob Storage V2 不再提供内容处置标头

Posted

技术标签:

【中文标题】Azure Blob Storage V2 不再提供内容处置标头【英文标题】:Azure Blob Storage V2 does not deliver content-disposition header any more 【发布时间】:2019-06-09 23:31:21 【问题描述】:

我对 Azure 博客存储 V2 中文件的“内容处置”blob 属性有疑问。

我在 Azure 门户中使用 Azure Storage Explorer 1.6.2(参见屏幕截图)asn 将我的文件 howto-201901.pdf 的此属性配置为“附件;文件名 = howto.pdf”。该属性已在文件中设置,但在下载时未作为标题信息提供。

用之前的存储V1,是不是没问题。如果我下载了文件howto-2010901.pdf,是否设置了http header content-disposition,并且浏览器像我的配置howto-pdf一样下载了文件。

但是自从 2 或 3 个月以来,也许自从我升级到存储 V2 之后,这个功能就不起作用了。浏览器用原名下载文件。

有没有人有信息让我解决这种行为?

最好的蒂诺

【问题讨论】:

我找到了这种行为的原因和解决方案。如果 url 没有 SAS 令牌,我猜将不再设置 content-disposition http 标头信息。添加 SAS 令牌,您就赢了。 docs.microsoft.com/en-us/azure/storage/common/… 【参考方案1】:

这是一个可能的解决方案,对我有用。

除了创建新策略之外,您还可以从 Blob 存储中获取现有策略吗?见https://docs.microsoft.com/en-us/azure/storage/common/storage-dotnet-shared-access-signature-part-1

    private Uri GetDownloadUri(CloudBlockBlob blob)
    
        try
        
            // Return the SAS token.
            var query = GenerateSASQueryString(blob);

            UriBuilder newUri = new UriBuilder(blob.Uri)
            
                Query = query
            ;

            return newUri.Uri;
        
        catch (UriFormatException ex)
        
            Console.WriteLine(ex);
        

        return blob.Uri;
    

    private string GenerateSASQueryString(CloudBlockBlob blob)
    
        if (blob == null)
            return null;

        // Create a new access policy for the account.
        SharedAccessBlobPolicy policy = new SharedAccessBlobPolicy
        
            Permissions = SharedAccessBlobPermissions.Read,
            SharedAccessExpiryTime = DateTimeOffset.UtcNow.AddHours(24),
            SharedAccessStartTime = DateTimeOffset.UtcNow
        ;

        // Return the SAS token.
        var query = blob.GetSharedAccessSignature(policy);
        return query;
    

【讨论】:

【参考方案2】:

我面临同样的问题,但我对 .NET SDK 和 SharedAccessBlobPolicy 感到非常困惑。

我正在使用Azure.Storage.Blobs 版本12.4.1 SDK 来管理存储。是否可以使用它来设置SharedAccessBlobPolicy,或者我应该以不同的方式进行设置?我试图查看文档,但它并没有真正的帮助,我只能找到有关 Microsoft.Azure.Storage.Blob SDK 版本 11 的信息,该版本被认为是遗留的,现在已弃用。

【讨论】:

【参考方案3】:

Content-Disposition 标头在下载 URL 未经过身份验证时不会发送响应。让客户接收Content-Disposition

    创建访问受限的 SAS 令牌。 将其附加到 blob 下载链接。

【讨论】:

以上是关于Azure Blob Storage V2 不再提供内容处置标头的主要内容,如果未能解决你的问题,请参考以下文章

使用 azure-storage-blob 或 azure-storage 上传和删除 Azure 存储 Blob

Azure.Cosmos 还是 Microsoft.Azure.Cosmos、Azure.Storage.Blob 还是 Microsoft.Azure.Storage.Blob?适用于 .NET C

如何用 Microsoft.Azure.Storage.Blob 替换 Microsoft.WindowsAzure.Storage

如何更新 Azure.Storage.Blob 中的元数据

Azure Storage用法:使用Blob Storage

从“azure.storage.blob”导入“BlobServiceClient”时出错