ASP.NET MVC:下载流而不会冻结
本文关键字:冻结 下载 NET MVC ASP | 更新日期: 2023-09-27 18:30:37
我们使用 ASP.NET MVC 4(演示),WCF(逻辑),Azure Blob存储(存储)。
是否可以在不冻结网站导航的情况下实现流下载(直通)?
我们确实需要"传递",因为需要自定义标头(内容处置等)。这意味着 FilePathResult 和直接链接到 Azure 是不可能的。
下载现在通过以下方式实现:
[HttpGet]
public ActionResult DownloadTemplate(Guid templateId)
{
Response.Clear(); Response.BufferOutput = false;
DownloadResult result = Client.DownloadTemplate(templateId)
Response.AddHeader("Content-Type", MimeHelper.GetMimeType(result.FileName));
Response.AddHeader("Content-Disposition", "attachment; filename=" + result.FileName);
byte[] buffer = new byte[4096]; int readed = 0;
while ((readed = result.ContentStream.Read(buffer, 0, buffer.Length)) > 0)
{
if (Response.IsClientConnected)
{
Response.OutputStream.Write(buffer, 0, readed);
Response.Flush();
}
}
return new EmptyResult();
}
也许你的按钮应该在控制器中对你的Web方法进行javascript ajax调用。
通过在存储抽象和浏览器之间添加代理 WCF rest 文件服务来解决。