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

标签 c# asp.net asp.net-mvc azure azure-blob-storage

我正在使用此代码将文件上传到 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 的重定向的 Action 来完成此操作。

    public ActionResult LoadFile(string path)
    {    
        string url = StorageManager.GetBlobUrlFromName(path);
        return Redirect(url);
    }

问题是这将在浏览器中打开文件,例如当我希望用户留在我的页面上但开始下载文件时,用户将被重定向离开我的网站并在浏览器中显示 .jpg 文件。

最佳答案

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

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

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

关于c# - Azure Blob 存储下载文件而不是在浏览器中打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30940796/

相关文章:

c# - 使用 C# 从 Google Chrome 获取当前选项卡的 URL

c# - 在 MySQL 中存储字符串

asp.net - "A potentially dangerous Request.Path value was detected from the client"由 GoogleBot 访问时,但不是通过直接链接

c# - 从代码隐藏初始化用户控件的正确方法是什么

javascript - 路由未按预期工作

c# - 如何使用 AutoMapper 映射子对象?

c# - 用户首次登录时启动应用

c# - 如何更改 DataTable 的列名?

c# - 具有域驱动设计的 MVC .NET 表单

asp.net - 如何使用 ViewDataDictionary 将自定义数据传递给 ASP.NET Core 中的分部 View