首页 > 解决方案 > 在浏览器中显示 Azure blob 图像文件并且不要强制下载

问题描述

这个问题前段时间就有人问过了。我希望今天的答案有所不同。

我正在使用 Azure blob 存储来保存网站的图像 (jpg)。我直接链接到我的<img>标签中的文件,效果很好(启用了匿名访问)。问题是,如果用户单击图像(直接链接到文件),他们将被迫下载它并且无法在浏览器中查看它。

有没有办法设置 blob 存储的标头以允许直接在浏览器中查看它而不强制下载。

更新1:

基于此如何查看 Azure Blob 存储中的图像,而不是下载它?和这个https://social.msdn.microsoft.com/Forums/windowsapps/en-US/b8759195-f490-420b-a587-2bb614366ad2/embedding-images-from-blob-storage-in-ssrs-report-does-不行

我发现我没有设置导致问题的内容类型。我需要将其设置为"image/jpeg". 不过,我不太确定该怎么做。这是我用来存储图像的代码。

using Microsoft.Azure.Storage.Blob

/// <summary>
/// Save a file to azure blob storage.
/// </summary>
/// <param name="name">Name of file</param>
/// <param name="file">filestream</param>
/// <param name="ct">Cancellationtoken</param>
public async Task<bool> SaveFile(Stream fileStream, string fileName, CancellationToken ct)
{
   CloudBlockBlob cloudBlockBlob = _blobContainer.GetBlockBlobReference(fileName);

   fileStream.Position = 0;
   await cloudBlockBlob.UploadFromStreamAsync(fileStream, ct);

   return true;
}

我没有找到任何类型的“.Content”或“Type”属性。会继续挖掘。

更新2:可能已经找到解决方案:

cloudBlockBlob.Properties.ContentType = "image/jpg";

测试

更新3:做到了。使用它为图像和 pdf 设置正确的内容类型,它们现在可以在浏览器中查看。

if (fileName.EndsWith(".jpg"))
{
    cloudBlockBlob.Properties.ContentType = "image/jpg";
}
else if (fileName.EndsWith(".pdf"))
{
    cloudBlockBlob.Properties.ContentType = "application/pdf";
}

标签: azureazure-blob-storage

解决方案


有关详细信息,请参阅问题。但是可以通过以下方式设置内容类型:

cloudBlockBlob.Properties.ContentType = "image/jpg";

推荐阅读