【问题标题】:Why is my File result filename corrupted IE9?为什么我的文件结果文件名损坏了 IE9?
【发布时间】:2014-05-01 14:43:00
【问题描述】:
我正在尝试为我的用户生成和返回文件。一些文件名包含 unicode 字符:aäa.pdf。尝试在 IE 9 中下载它们时,文件名已损坏,并且下载显示如下:
在 Chrome 中,它按预期工作。这是返回语句:
return File(fileStream: stream,
contentType: System.Net.Mime.MediaTypeNames.Application.Octet,
fileDownloadName: myModel.Name + "." + pub.OutputFileType);
如何解决 IE 9 的问题?
【问题讨论】:
标签:
.net
asp.net-mvc-3
utf-8
internet-explorer-9
filestreamresult
【解决方案1】:
这似乎在 IE9 上根本不可行,正如 cmets 中的 namesv 所指出的那样。我终于通过滥用浏览器功能解决了它:当它请求/foo/fileÄÖ.pdf之类的东西并返回一个文件时,使用了URL中的“文件名”。
所以,我创建了一条新路线,将我的动态下载定位到它并在操作中执行此操作:
if (Request.Browser.Browser == "IE" && Request.Browser.MajorVersion == 9)
{
// The filename comes from the Route used, which is like host/Print/File.pdf
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment");
Response.ContentType = System.Net.Mime.MediaTypeNames.Application.Octet;
Response.Charset = "utf-8";
Response.HeaderEncoding = UnicodeEncoding.UTF8;
Response.ContentEncoding = UnicodeEncoding.UTF8;
byte[] buffer = new byte[4096];
int count = 0;
while ((count = stream.Read(buffer, 0, buffer.Length)) > 0)
{
Response.OutputStream.Write(buffer, 0, count);
Response.Flush();
}
Response.End();
return null;
}
else
{
return File(
fileStream: stream,
contentType: System.Net.Mime.MediaTypeNames.Application.Octet,
fileDownloadName: compilation.Name + "." + pub.OutputFileType);
}