加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

.net – 为什么我的文件结果文件名损坏了IE9?

发布时间:2020-12-16 03:23:34 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试为我的用户生成并返回文件.某些文件名包含unicode字符:a?a.pdf.当尝试在IE 9中下载它们时,文件名被破坏,下载如下所示: 在Chrome中,它按预期工作.这是return语句: return File(fileStream: stream,contentType: System.Net.Mime.MediaTypeNames.
我正在尝试为我的用户生成并返回文件.某些文件名包含unicode字符:a?a.pdf.当尝试在IE 9中下载它们时,文件名被破坏,下载如下所示:

在Chrome中,它按预期工作.这是return语句:

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

我该如何解决IE 9的问题?

解决方法

似乎这对IE9来说根本不可行,因为评论中的namesv状态.我最终通过滥用浏览器功能解决了这个问题:当它请求像/foo/file??.pdf这样的东西并返回一个文件时,会使用URL中的“filename”.

所以,我创建了一个新的路线,将我的动态下载定位到它,并在动作中执行此操作:

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,buffer.Length)) > 0)
    {
        Response.OutputStream.Write(buffer,count);
        Response.Flush();
    }
    Response.End();
    return null;
}
else
{
    return File(
        fileStream: stream,fileDownloadName: compilation.Name + "." + pub.OutputFileType);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读