【问题标题】:Rename azure blob file and Download it重命名 azure blob 文件并下载
【发布时间】:2017-07-31 09:03:28
【问题描述】:

我在 azure blob 中有几个文件以唯一的文件名存储,当客户端想要下载时,我想重命名为友好名称。

我仍在我的项目中使用 2014 天蓝色存储 dll,我不打算很快更新它们。所以我不能使用内置的ContentDeposition 并重命名它。

我尝试在我的控制器中使用以下代码:

        var blob = blobStorage.GetBlobRef("https://mysite.blob.core.windows.net/my-container/WERF3234435FFF_ERFas23E.doc");

        MemoryStream memStream = new MemoryStream();
        blob.DownloadToStream(memStream);
        Response.ContentType = blob.Properties.ContentType;
        Response.AddHeader("Content-Disposition", "Attachment; filename=abcd_New.doc");
        Response.AddHeader("Content-Length", blob.Properties.Length.ToString());
        Response.BinaryWrite(memStream.ToArray());

但它没有下载文件。

我也试过用这个:

        MemoryStream memStream = new MemoryStream();
        blob.DownloadToStream(memStream);
        System.Web.HttpContext.Current.Response.Clear();
        System.Web.HttpContext.Current.Response.ContentType = blob.Properties.ContentType;
        System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "Attachment; filename=" + friendlyName.doc);
        System.Web.HttpContext.Current.Response.AddHeader("Content-Length", blob.Properties.Length.ToString());
        System.Web.HttpContext.Current.Response.BinaryWrite(memStream.ToArray());
        System.Web.HttpContext.Current.Response.End();

我将我的业务逻辑放在一个单独的解决方案中,并从那里获取我的主要解决方案的 blob 引用。

我错过了什么吗?

【问题讨论】:

  • 你已经标记了这个asp.net-mvc,但我在这里没有看到任何 MVC?

标签: azure-storage azure-blob-storage


【解决方案1】:

当我们谈论 ASP.NET MVC 时,我在您的代码中缺少控制器/操作?在执行 ASP.NET MVC 时,您不应该自己写信给HttpContext。你有ActionResults。

public ActionResult Download()
{
// ...
    var bytes = memStream.ToArray();
    return File(bytes, System.Net.Mime.MediaTypeNames.Application.Octet, "abcd_New.doc");
}

浏览器将决定是打开文件下载还是直接在浏览器窗口中打开。如果你想控制它,在调用return File(... 方法之前需要以下代码:

var contentDisposition = new System.Net.Mime.ContentDisposition
{
    FileName = "abcd_New.doc",
    Inline = false // true will try to open in Browser, false will download
};
Response.AppendHeader("Content-Disposition", contentDisposition.ToString());

【讨论】:

  • 感谢您的回复。你是对的,我不应该在 MVC 中使用 HttpContext。我尝试将'Inline'设置为false,仍然没有下载。此外,如果我将其设置为 true,它也不会打开文件。
【解决方案2】:

我们需要在将文件写入响应后刷新我们的响应。我使用您提供的代码。添加以下代码后,我可以看到文件可以从服务器下载。

Response.BinaryWrite(memStream.ToArray());

Response.Flush();
Response.End();

【讨论】:

    猜你喜欢
    • 2020-10-24
    • 1970-01-01
    • 2011-12-29
    • 2017-01-08
    • 2021-05-25
    • 2017-08-20
    • 1970-01-01
    • 2021-01-04
    相关资源
    最近更新 更多