Django中设置Content-Disposition保存中文命名的文件
django开发导出数据库的一些数据生成excel表格的功能,关键代码如下:
filename = timezone.now().strftime("%Y%m%d")+'.xls'
response = HttpResponse(content_type='application/vnd.ms-excel')
response['Content-Disposition'] = 'attachment; filename=' + filename
其中用英文数字的文件名如a2017.xls,浏览器显示正常,但是用了中文后,就是默认的文件名,如下载.xls
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
原因是不同浏览器对于下载文件文件名的编码解析格式不一样
在后台把文件名先encode成bytes,再判断浏览器,根据不同的浏览器用相应的编码decode一下就好了
例如浏览器是ff,后台编码是utf-8
response['Content-Disposition'] = 'attachment; filename=' + filename.encode('utf-8).decode('ISO-8859-1')
就ok了
常用浏览器解析格式。
我也遇到了这个问题,在网上搜到的答案是HTTP的header只支持ASCII,要将content-disposition的值转换成ASCII,像下面这样:
至于后面为何要加ISO-8859-1我就不清楚了。
我使用了这段代码,文件名成功显示了中文。
注:我在Firefox和Chrome上测试过了,运行正确,别的浏览器就不清楚了。