c# – ASP.NET MVC无法传输文件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – ASP.NET MVC无法传输文件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1934字,纯文字阅读大概需要3分钟。
内容图文
![c# – ASP.NET MVC无法传输文件](/upload/InfoBanner/zyjiaocheng/779/7370f35003ee492989e4d95227562a02.jpg)
我有一个ASP.NET MVC 4站点,使用OPEN XML SDK创建一个excel文件.我只是将超链接指向适当的控制器,它生成OPEN XML excel文档并将流写入响应头并完成.在IE 9和Chrome中,这很好用.使用给定的文件名和正确的内容下载文件.然而,就在最近我将浏览器升级到IE 10,而不是下载文件并在excel中打开我得到的错误无法打开’URI’.当我单击确定它会出现另一个错误:Microsoft Excel无法访问文件’URI’.有几个可能的原因:
我不明白为什么这可以在IE 9和Chrome中工作,而不是在IE 10中.我使用小提琴程序调试了响应头,它具有正确的内容类型和内容长度设置:
内容类型:application / vnd.openxmlformats-officedocument.spreadsheetml.sheet
内容处理:附件;文件名= result.xlsx
内容长度:1232
有什么东西我错过了吗?
代码片段:这一切都是其中的一部分
public override void ExecuteResult(ControllerContext context)
{
...
....
..
extention = "xlsx";
response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
response.AddHeader("Content-Disposition",
String.Format("attachment; filename={0}.{1}", fileName, extention));
response.AddHeader("Content-Length", mem.Length.ToString());
mem.Seek(0, SeekOrigin.Begin); // Go back to the begining.
mem.CopyTo(response.OutputStream);
context.HttpContext.ApplicationInstance.CompleteRequest();
}
解决方法:
作为一种解决方法,Controller.File适用于ASP.NET MVC 4和IE 10:
public class DownloadController : Controller
{
public ActionResult GetFile()
{
...
mem.Position = 0;
return File(
mem,
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"result.xlsx");
}
}
编辑
所以我一直在CodePlex上浏览MVC源代码,发现了一些与你的代码片段不同的实现细节:
>从不设置Content-Length标头
>而不是调用Stream.CopyTo,他们使用一个简单的Stream.Read,Stream.Write循环,缓冲区大小为0x1000
>设置Content-Disposition标头时,它们会检查文件下载名称是否包含UTF-8字符,如果是,则根据RFC 2231对其进行编码.请参阅ContentDispositionUtil.GetHeaderValue
>从不调用context.HttpContext.ApplicationInstance.CompleteRequest()
现在,您可以尝试逐个应用这些更改,并查看哪一个使其适用于IE 10.
内容总结
以上是互联网集市为您收集整理的c# – ASP.NET MVC无法传输文件全部内容,希望文章能够帮你解决c# – ASP.NET MVC无法传输文件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。