flask下载文件中文IE,Edge,Safari文件名乱码
flask(0.11.2)+python3.6
- 兼容各个主流浏览器,已经过各种测试(chrome,firefox,safari,IE,Edge)
- quote是将文件名urlencode化,然后以适应Edge浏览器
from urllib.parse import quote # for python3
# from urllib import quote for python2
@app.route('/file/download/<filename>', methods=['GET'])
def file_download(filename):
filename=FILE_PATH+filename
response = make_response(send_file(filename)) #
basename = os.path.basename(filename)
utf_filename=quote(basename.encode('utf-8')
response.headers["Content-Disposition"] = "attachment;filename*=UTF-8''{}".format(utf_filename)
response.headers['Content-Type'] = "application/octet-stream; charset=UTF-8"
return response
"""
Content-Disposition中的filename进行了两次URL转码。以汉字漫为例:
第一次转码,漫变为%E6%BC%AB。
第二次转码,%E6%BC%AB变为%25E6%25BC%25AB(第二次转码时,因为%是特殊字符,所以会转为%25)。
前端下载时:
Chrome浏览器可以自动执行两次URL解码,所以下载的文件名是正常的。
IE浏览器只执行一次URL解码,所以下载的文件名是第一次编码的结果(%E6%BC%AB)(版本8,10验证问题存在)。
火狐好像也不行。
解决方案是在返回给前端前对Content-Disposition中的filename先进行一次URL解码(实际我是对filename这个参数进行了解码,因为文件服务器是用的第三方的。)。
此外,当文件名为中文(未执行URL编码)字符串时,IE下载也为乱码,因为IE对中文字符串又执行了一次URL解码。解决方案是将中文字符串进行URL编码。
所以,总结下来,关键的问题就在于IE浏览器对filename只进行一次解码,而chrome对这种情况是进行了优化的
"""
flask下载文件中文IE,Edge,Safari文件名乱码的更多相关文章
- IE浏览器下载文件中文文件名乱码问题解决
处理过程 根据IE的F12中的log提示,是因为http头信息中的编码替换了html文件中的编码.我最初的思路是设置Tomcat默认编码,但是我发现我已经在Server.xml中设置过,想到这里我想到 ...
- HTTP 下载文件中文文件名在 Firefox 下乱码问题
转自:http://www.imhdr.com/991/ HTTP 下载文件,中文文件名在 Firefox 下乱码问题 最近帮助一同事解决 HTTP 下载文件时,中文文件名在 Firefox 下乱码的 ...
- 火狐浏览器下载文件中文乱码,文件名中的空格变加号("+")的问题
解决一下问题: 1.火狐浏览器下载文件,中文变乱码 2.IE浏览器下载文件,丢失文件扩展名或强制扩展名为".txt" 3.浏览器下载文件,文件名中的空格变成加号("+&q ...
- Flask下载文件
前言 由于最近在做文件管理模块的功能,所以难免会遇到文件上传下载这块的功能.不过文件上传那块是调用的OSS api,所以接触的不多. 文件的下载: 1. 接口返回真实的文件 这种情况比较简单, fla ...
- [转]JSP或servlet中(以及上传下载文件)中文乱码或不显示的解决方案
时间 2014-04-14 14:33:44 CSDN博客 原文 http://blog.csdn.net/xby1993/article/details/23677375 主题 ServletJ ...
- 解决PHP在IE中下载文件,中文文件名乱码问题
if( stripos($_SERVER['HTTP_USER_AGENT'], 'MSIE')!==false ) $filename = urlencode( $filename ); // 输入 ...
- QWebView下载文件,QUrl中解析文件名
参考网址: http://blog.csdn.net/cdnight/article/details/23658715 http://www.tuicool.com/articles/AzeaUz h ...
- flask下载文件---文件流
html: <a name="downloadbtn" class="btn btn-success pull-right" href="/do ...
- JAVA下载文件中文乱码问题
http://blog.itpub.net/92037/viewspace-788900/ 最后的中文乱码没有解决 现在我在系统中用到了两个组件,smartupload,一个支持中文,一个不支持.但是 ...
随机推荐
- Go语言之高级篇beego框架之model设计构造查询
一.model设计构造查询 QueryBuilder 提供了一个简便,流畅的 SQL 查询构造器.在不影响代码可读性的前提下用来快速的建立 SQL 语句. QueryBuilder 在功能上与 ORM ...
- 临时和永久关闭Selinux
临时关闭: [root@localhost ~]# getenforceEnforcing [root@localhost ~]# setenforce 0[root@localhost ~]# ge ...
- 还在为工作发愁?学JavaScript吧
事实上,每家专业招聘机构,从Glassdoor.com和Linkedin到美国劳工部,都报导了就业市场对开发人员需求的增长速度出于意料地快.这种需求可能已经不新鲜了,但是就业市场对哪种开发语言的需求量 ...
- pod update报错(Cocoapods: Failed to connect to GitHub to update the CocoaPods/Specs specs repo)报错解决方案
好长一段时间没动pods,今天偶然需要更新一个库,于是执行了下pod update,然后惊悚的出现了这个报错: [!] Failed to connect to GitHub to update th ...
- C语言判断文件夹或者文件是否存在的方法【转】
C语言判断文件夹或者文件是否存在的方法 方法一:access函数判断文件夹或者文件是否存在 函数原型: int access(const char *filename, int mode); 所 ...
- ListView中的Item点击事件和子控件的冲突或者item点击没有反应的解决的方法
fragment中加入了button和checkbox这些控件.此时这些子控件会将焦点获取到.所以经常当点击item时变化的是子控件.item本身的点击没有响应. 这时候就能够使用descendant ...
- 在 word 中对正文和目录进行分节显示页码
使用版本 word 2016 使目录独占一页:在正文第一页的第一个字符前插入分节符下一页(布局--分节符--下一页),此时会在正文第一个字符前插入分节符.在之前插入一张空白页,用于插入目录.(插入 - ...
- 搭建一个免费的,无限流量的Blog----github Pages和Jekyll入门[zz]
喜欢写Blog的人,会经历三个阶段. 第一阶段,刚接触Blog,觉得很新鲜,试着选择一个免费空间来写. 第二阶段,发现免费空间限制太多,就自己购买域名和空间,搭建独立博客. 第三阶段,觉得独立博客的管 ...
- css table样式
1.table样式首先设置表格边框,属性设置表格的边框是否被合并为一个单一的边框. table{ border-collapse: collapse; border-spacing: 0;} 2.固定 ...
- Linux给普通用户增加ssh权限
//1,创建用户 useradd name //2,修改密码 passwd name //3,修改ssh配置文件,在最后一行添加AllowUsers name vi /etc/ssh/sshd_con ...