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