Azure Blob 存储下载文件,而不是在浏览器中打开

本文关键字:浏览器 存储 Blob 下载 文件 Azure | 更新日期: 2023-09-27 17:57:23

我正在使用此代码将文件上传到Azure blob存储,其中container是我的CloudBlobContainer

    public void SaveFile(string blobPath, Stream stream)
    {
        stream.Seek(0, SeekOrigin.Begin);
        CloudBlockBlob blockBlob = container.GetBlockBlobReference(virtualPath);
        blockBlob.Properties.ContentDisposition = 
"attachment; filename=" + Path.GetFileName(virtualPath);
        blockBlob.UploadFromStream(stream);
    }

然后,当用户单击我的网页中的文件时,我正在尝试触发下载,提示他们保存/打开该文件。我通过调用一个返回重定向到 blob URL 的操作来做到这一点。

    public ActionResult LoadFile(string path)
    {    
        string url = StorageManager.GetBlobUrlFromName(path);
        return Redirect(url);
    }
问题是这将在浏览器中打开文件,

例如,当用户期望他们留在我的页面上但开始下载文件时,用户将被重定向离开我的网站并在浏览器中显示一个.jpg文件。

Azure Blob 存储下载文件,而不是在浏览器中打开

您可能错过的是设置属性后调用blockBlob.SetProperties()

在我的代码上,它看起来像这样:

blob.CreateOrReplace();
blob.Properties.ContentType = "text/plain";
blob.Properties.ContentDisposition = "attachment; filename=" + Path.GetFileName(blobName);
blob.SetProperties(); // !!!  

实现所需目标的一种方法是让 MVC 操作从 blob 存储中提取映像并返回文件,即:

public ActionResult LoadFile(string path)
{    
    byteArray imageBytes = ....get img from blob storage
    return File(byteArray, "image/png", "filename.ext");
}