我的azure blob中有很少的文件存储有唯一的文件名,当客户想要下载时,我想重命名为友好名称。
我仍然在我的项目中使用2014年的azure存储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引用到我的主要解决方案。
我错过了什么吗?
答案 0 :(得分:0)
当我们谈论ASP.NET MVC时,我在代码中缺少Controller / Action?在做ASP.NET MVC时,你不应该自己写HttpContext
。你有ActionResult
个。
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());
答案 1 :(得分:0)
我们需要在写入文件后回复我们的响应。我使用您提供的代码。添加以下代码后,我可以看到该文件可以从服务器下载。
Response.BinaryWrite(memStream.ToArray());
Response.Flush();
Response.End();