5

我正在尝试为我的用户生成和返回文件。一些文件名包含 unicode 字符:aäa.pdf. 尝试在 IE 9 中下载它们时,文件名已损坏,下载内容如下所示:

         ie9文件名问题

在 Chrome 中,它按预期工作。这是返回语句:

return File(fileStream: stream, 
            contentType: System.Net.Mime.MediaTypeNames.Application.Octet, 
            fileDownloadName: myModel.Name + "." + pub.OutputFileType);

如何解决 IE 9 的问题?

4

1 回答 1

2

正如评论中的namesv所说,这似乎对IE9根本不可行。我终于通过滥用浏览器功能解决了这个问题:当它请求类似的东西/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);
}
于 2014-04-02T12:48:58.490 回答