簡體   English   中英

Azure Blob 存儲 - 下載和上傳時的內容類型設置

[英]Azure Blob Storage - Content Type Setting on Download and Upload

我正在嘗試使用 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 文檔。

知道出了什么問題嗎?

如下圖所示, Content-Type標頭作為一個屬性存儲在Blob Properties中,因此它將被設置到下載響應的標頭中,然后在瀏覽器下載時將其識別為 word 文件。

在此處輸入圖像描述

因此,當您上傳 word 文件時,需要通過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標頭。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM