Azure Blob存储-下载和上传时的内容类型设置

时间:2019-11-27 13:18:34

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

我正在尝试使用C#将Word文档上载到Blob存储。代码段如下:

var blobServiceClient = new BlobServiceClient(connectionString);
var containerClient = blobServiceClient.GetBlobContainerClient(container);
containerClient.CreateIfNotExists(PublicAccessType.None);
var blobClient = containerClient.GetBlobClient(documentName);
using (var memoryStream = new MemoryStream({Binary of the File}))
{
    var headers = new BlobHttpHeaders() { ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document" };
    await blobClient.UploadAsync(memoryStream, httpHeaders: headers).ConfigureAwait(false);
}

文档已成功上传到Blob存储。我可以看到在通过Azure存储资源管理器查看时,内容类型也已正确设置。但是,当我尝试通过浏览器(chrome)访问此文档(使用文档URL)时,它会将文件下载为未知文件。

我尝试通过Azure存储资源管理器上载word文档来进行相同的操作。通过浏览器下载该文件时,将以Word文档的形式下载该文件。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如下图所示,Content-Type标头作为属性存储在Blob Properties中,因此将其设置为下载响应的标头,然后将其识别为Word文件,而通过浏览器下载。

enter image description here

因此,当您上载单词文件时,必须通过BlobBaseClient.SetHttpHeaders(BlobHttpHeaders, BlobRequestConditions, CancellationToken) MethodBlobBaseClient.SetHttpHeadersAsync(BlobHttpHeaders, BlobRequestConditions, CancellationToken) Method为blob设置ContentType属性。

然后在您的服务器应用上自己编写一个下载响应的标题的Content-Type头,下面的值为contentType

Response<BlobProperties> response = await blobClient.GetPropertiesAsync();
var contentType = response.Value.ContentType

或者来自带有sas令牌的blob URL的下载响应,其头默认包含ContentType属性作为Content-Type头。