Nen*_*lep 5 .net utf-8 filestreamresult internet-explorer-9 asp.net-mvc-3
我正在尝试为我的用户生成并返回文件.某些文件名包含unicode字符:aäa.pdf.当尝试在IE 9中下载它们时,文件名被破坏,下载如下所示:

在Chrome中,它按预期工作.这是return语句:
return File(fileStream: stream,
contentType: System.Net.Mime.MediaTypeNames.Application.Octet,
fileDownloadName: myModel.Name + "." + pub.OutputFileType);
Run Code Online (Sandbox Code Playgroud)
我该如何解决IE 9的问题?
看来这对于 IE9 来说是根本不可能的,正如注释中的 namesv 所说。我最终通过滥用浏览器功能解决了这个问题:当它请求类似内容/foo/file\xc3\x84\xc3\x96.pdf并返回文件时,将使用 URL 中的“文件名”。
因此,我创建了一条新路线,将动态下载定位到它,并在操作中执行此操作:
\n\nif (Request.Browser.Browser == "IE" && Request.Browser.MajorVersion == 9)\n{\n // The filename comes from the Route used, which is like host/Print/File.pdf\n Response.Clear();\n Response.AddHeader("Content-Disposition", "attachment");\n Response.ContentType = System.Net.Mime.MediaTypeNames.Application.Octet;\n Response.Charset = "utf-8";\n Response.HeaderEncoding = UnicodeEncoding.UTF8;\n Response.ContentEncoding = UnicodeEncoding.UTF8;\n byte[] buffer = new byte[4096];\n int count = 0;\n\n while ((count = stream.Read(buffer, 0, buffer.Length)) > 0)\n {\n Response.OutputStream.Write(buffer, 0, count);\n Response.Flush();\n }\n Response.End();\n return null;\n}\nelse\n{\n return File(\n fileStream: stream,\n contentType: System.Net.Mime.MediaTypeNames.Application.Octet,\n fileDownloadName: compilation.Name + "." + pub.OutputFileType);\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1085 次 |
| 最近记录: |