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,一个支持中文,一个不支持.但是 ...
随机推荐
- OUI启动时的小错误PRVF-0002
[oracle@bys3 database]$ Starting Oracle Universal Installer... Checking Temp space: must be greater ...
- mysql 字符串分割 和 动态执行拼接sql
本人以前主要用的是MSSQL,最近项目在使用MYSQL,自己是一个 典型的小白.今天就记录一下 一个mysql存储过程,里面需要分割字符串和 动态执行sql语句. 关于字符串 分割我开始使用 LOCA ...
- 最新版本Zabbix3.4+Grafana5 整合部署
一.Grafana简介 Grafana是一个可视化面板(Dashboard),有着非常漂亮的图表和布局展示,功能齐全的度量仪表盘和图形编辑器,支持Graphite.elasticsearch.zabb ...
- 微软BI 之SSRS 系列 - 基于时间段参数的 MDX 查询以及时间日历 Date Picker 的时间类型参数化
今天在天善问答里看到一个问题,如果我没有理解错的话,它应该是指比如在一个报表中选取一个时间段,然后求出这个时间段的某个 Measure 的 SUM 和.并且同时求出这两个时间点对应的上一年的时间点之间 ...
- Emoji 编码
https://segmentfault.com/a/1190000007594620 http://cenalulu.github.io/linux/character-encoding/ http ...
- Oracle 12c利用数据泵DataPump进行Oracle数据库备份
1.查看数据库版本 SQL> select version from v$instance; VERSION ----------------- 12.1.0.2.0 2.sysdba用户登录s ...
- Rocket Typist for Mac(增强型文本快速输入工具)破解版安装
1.软件简介 Rocket Typist 是 macOS 系统上一款增强型文本快速输入工具,我们可以利用这款工具预先设置保存好很多日常生活学习或是工作中常用的文本片段,还能设定部分内容为变量,当 ...
- 我的Nginx配置文件
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #erro ...
- PHP —— 识别运算符实现逻辑比较
最近遇到一个功能的开发,大致意思就是根据用户输入的条件,进行相关的比较操作.本来打算使用用户选择运算符的方式,但是后来结合项目实际,发现需要使用用户输入的自定义运算比较现实一点.大致意思就是: 1.用 ...
- [svc]openssl对称非对称加密实战
OpenSSL进行aes加密解密-对称加密(symmetry) 建立文件test.txt, 特意写入中英文 # cd /tmp # echo "test测试" > test. ...