我正在尝试使用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文档的形式下载该文件。
有什么想法吗?
答案 0 :(得分:0)
如下图所示,Content-Type
标头作为属性存储在Blob Properties
中,因此将其设置为下载响应的标头,然后将其识别为Word文件,而通过浏览器下载。
因此,当您上载单词文件时,必须通过BlobBaseClient.SetHttpHeaders(BlobHttpHeaders, BlobRequestConditions, CancellationToken) Method
或BlobBaseClient.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
头。