目前支持ie9-11,firefox63.0,chrome69.0,qq10.2.1的版本,safari的最新版本(特别是解决mac下的safari中,下载文件的中文文件名问题)。

下载文件时, 设置Content-Disposition。对于较新的 Firefox 、 Chrome 、 Opera 、 Safari 等浏览器,都支持新标准规定的 filename* ,并且会优先使用,所以尽管 filename=”encoded_text” 不被它们支持,仍然不会有问题;至于使用 UTF-8 只是因为它是标准中强制要求必须支持的。而对于旧版本的IE浏览器,它们无法识别后面的 filename* ,会自动忽略并使用旧的 filename 。这样一来就完美解决了多浏览器的多语言兼容问题,不需要 UA 判断。

    result.Content.Headers.Add("content-disposition",
string.Format("attachment;filename={0};filename*=utf-8''{0}", HttpUtility.UrlEncode(fileName, Encoding.UTF8)));

注意的下载文件的时候,safari需要显性指定Mime ,之前默认是"application/octet-stream",只兼容了非safari浏览器。

代码如下:

           switch (Path.GetExtension(fileName).ToLower()){case ".xlsx": fileType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; break;case ".docx": fileType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; break;case ".pptx": fileType = "application/vnd.openxmlformats-officedocument.presentationml.presentation"; break;case ".pdf": fileType = "application/pdf"; break;case ".jpg": fileType = "image/jpeg"; break;case ".jpeg": fileType = "image/jpeg"; break;case ".png": fileType = "image/png"; break;default: break;}

参考:

https://blog.robotshell.org/2012/deal-with-http-header-encoding-for-file-download/

https://medium.com/@hyWang/%E5%A6%82%E4%BD%95%E5%9C%A8%E4%B8%8D%E5%90%8C%E7%80%8F%E8%A6%BD%E5%99%A8%E4%B8%8B%E8%BC%89%E6%AD%A3%E7%A2%BA%E7%9A%84%E6%AA%94%E6%A1%88%E5%90%8D%E7%A8%B1-content-disposition-7ef13555b1ba

正确处理下载文件时HTTP头的编码问题(Content-Disposition),safari下载文件 中文名乱码问题相关推荐

  1. 解决window.location.href 下载文件时,一次点击产生两次下载+页面跳转问题

    解决window.location.href 下载文件时,一次点击产生两次下载+页面跳转问题 参考文章: (1)解决window.location.href 下载文件时,一次点击产生两次下载+页面跳转 ...

  2. 浏览器下载文件时一共发送2次请求,如何把“下载次数”只记录为1次?

    最近,个人官网实现了PDF下载功能,出于统计的考虑,增加了"下载次数"download_count这个字段. 但是,我今天突然发现,每次下载download_count都直接+2了 ...

  3. H5 下载word文件时预览失败,提示无法预览此文件,它可能已损坏,有部分可可以查看预览

    移动端H5下载文件功能时,发现部分word文件可以在线打开 有些无法打开,提示"无法预览此文件,它可能已损坏": 但是在Pc端下载是可以正常打开的,移动端是不行. 代码如下: by ...

  4. Mac下解决复制重复文件时,没有像Windows“保留二者”的选项 - Mac文件夹合并,保留重复文件 - xx(1).jpg

    情景 你需要在Mac下复制文件到文件夹"B",但是有部分文件重复了,这时系统没有"保留二者"的选项,只能"跳过","停止" ...

  5. CLin 和 IDEA创建文件时自动添加作者和时间信息 + 多个.cpp文件在CLion下运行问题...

    CLin 和 IDEA创建文件时自动添加作者和时间信息 file -> setting -> Editor -> File and Code Templates -> 点击In ...

  6. 无法访问指定计算机,电脑打开磁盘/程序/文件时提示Windows无法访问指定设备、路径或文件怎么办...

    ‍ 最近有不少用户在打开打开磁盘.程序或文件时,具体提示内容:"Windows无法访问指定设备.路径或文件.您可能没有合适的权限访问这个项目."假如我们在电脑中发现存在上述的情况, ...

  7. 删除某一文件夹或文件时,提示“操作无法完成,因为其中的文件夹或文件已在另一个程序中打开”

    目录 1 问题 2 解决方法 2.1 方法一 2.2 方法二(推荐) 1 问题 有时候在删除文件夹或文件时,总是删不掉,并提示"操作无法完成,因为其中的文件夹或文件已在另一个程序中打开&qu ...

  8. 下载文件时,响应Response设置,浏览器弹出下载框

    在你潇洒的写下InputStream转到response的时候,需要先设置下Response,否则浏览器并不会弹出下载框 预处理 "Content-Type", "app ...

  9. 计算机搜索文件时找不到搜索按钮,电脑搜不到文件怎么办?文件搜索软件用起来!...

    有些时候电脑文件保存了,但是忘记保存路径,怎么也找不到怎么办?电脑搜不到文件怎么解决,电脑文件搜索功能不能用,怎么找到文件?Everyting文件搜索工具这个时候就可以起到帮助了. 例如下图,这样的问 ...

最新文章

  1. JavaScript之表单元素操作
  2. Halcon中MIN宏定义与自己定义的C++中MIN函数--重命名冲突问题解决方法
  3. sor迭代法matlab实例,Jacobi G-S SOR迭代法在matlab中例子.pdf
  4. flex tree 展开树节点
  5. RHEL7 yum安装配置LAMP(Apache+PHP+MySql)服务器
  6. ASP.NET2.0 ObjectDataSource的使用详解(1)
  7. java动态语言_探秘Java 7:JVM动态语言支持详解
  8. PHP和ajax请求_「jQuery+PHP」ajax请求以及接口PHP响应教程
  9. https的报文传输机制
  10. 测测你的杀毒软件强弱等级吧!!!!!
  11. ubuntu(乌班图)常用命令大全
  12. 基于SSM的校园二手交易平台
  13. day10、1 - 扫描与爆破
  14. Reflect的理解
  15. MT6761处理器介绍
  16. 这5个PHP编程中的不良习惯,一定要改掉!
  17. uniapp微信小程序老预览失败,或者上传失败(已解决)
  18. cartographer_pose_extrapolator
  19. 项目管理甘特图-动态时间轴
  20. strstr函数实现(C语言)

热门文章

  1. 01-初始化Vite项目
  2. Azure Kinect 使用记录 (一)
  3. 银行安全用电监管云平台
  4. Oracle分析函数大全
  5. 安装java后怎么使用
  6. 【Java中方法的使用】
  7. 关于封包工具一上午的研究总结
  8. 【详解python中round函数】
  9. Spring之注解开发
  10. Promoter Capture Hi-C:研究启动子区染色质互作的利器