起因

工作需要维护一个工单系统,下载文件时如果文件名有中文会导致乱码,并且下载时不显示文件的完整大小,没有进度条

修改

原先接口是这样写的

# view入口
class DownFile(BaseView):@manage_permission_check('workflow_admin')def get(self, request, *args, **kwargs):request_data = request.GETfile_name = request_data.get('file_name')if not file_name:file_name = r'./media/ticket_temp/社会面全量点位信息.csv'return api_fileresponse(open(file_name, 'rb'))
# response构造接口
def api_fileresponse(data, name, content_type="application/octet-stream"):res = StreamingHttpResponse(data, content_type=content_type)res['Content-Disposition'] = 'attachment;filename="{}"'.format(name)return res

导致下载时中文文件名丢失,无下载进度

查了一下,有文章提到解决办法,然后改成了这样

from django.utils.encoding import escape_uri_path
def api_fileresponse(data, content_type="application/octet-stream"):name = data.nameres = StreamingHttpResponse(data, content_type=content_type)res['Content-Disposition'] = 'attachment;filename="{}"'.format(escape_uri_path(name.split('/')[-1]))res['Content-Length'] = os.path.getsize(data.name)return res

用了escape_uri_path,并把文件大小传入,文件名和进度正常了

最后查官方文档-response部分,发现更简单的FileResponse(查的Django4.0的文档,项目为3.2版本),直接open_file 传入set_headers方法,都给你把源文件的内容填上了。

结果

有问题查文档反而更快,最终改成这样

不过Django3.2.18,set_headers好像没有传入文件大小,要手动把Content-Length手动补上

def api_fileresponse(data):res = FileResponse(data, as_attachment=True)res.set_headers(data)res['Content-Length'] = os.path.getsize(data.name)return res

Django下载文件中文乱码 FileResponse 浏览器正确识别文件名和文件大小的简单方法相关推荐

  1. 解决ff浏览器下载文件中文乱码问题

    之前做的Word导出简历功能,前端点完要直接下载,遇到了ff浏览器下载时中文乱码的问题 function exportWord(id) {window.location.href = "/w ...

  2. Firefox下载文件中文乱码

    某系统有下载文件的功能,且文件名为中文,在Chrome浏览器中下载文件正常,而通过Firefox下载时文件的中文名却变成了"%E..."这样的"乱码",如下图, ...

  3. Firefox下载文件中文乱码问题

    今天百度了一下这个问题 -- 但是却发现都是写给开发者解决单一界面的问题. 无奈之下只能自己寻求出路. -- 在Firefox的附加组件中搜索"下载文件编码". 在附加组件界面单击 ...

  4. zk下载文件中文乱码解决方案

    本文来自 http://sun4love.iteye.com/blog/1068254 转载请注明 IE,chrome,ff,opera测试通过 Java代码 /** * User: sunflowe ...

  5. Java: IE Firefox下载文件中文乱码的兼容代码

    需要使用两种不同编码方式来处理,在Firefox 11和IE 8下测试通过: HttpServletRequest request = ServletActionContext.getRequest( ...

  6. 解决java web中safari浏览器下载后文件中文乱码问题

    解决java web中safari浏览器下载后文件中文乱码问题 参考文章: (1)解决java web中safari浏览器下载后文件中文乱码问题 (2)https://www.cnblogs.com/ ...

  7. 简单的node文件上传下载及中文乱码问题解决

    1. 基于MEAN的技术栈,使用restful风格的接口 2. 在前端代码中放置文件上传按钮和处理表单数据 <div class="upload-file btn btn-sm btn ...

  8. 【Django】Django+Ajax下载文件(使用FileResponse)

    1.说明 使用Django下载文件的方式有多种,这里使用的是FileResponse对象返回文件即可 # 视图函数 @csrf_exempt def getFinanceBalanceFile(req ...

  9. PHP使用文件流下载文件方法(附:解决下载文件内容乱码问题)

    记得高中时候做过游戏私服,那时候的游戏主页是用PHP写的,因为文件很固定,客户端,登陆器和一些小工具,文件数目也不是很多,所以都是直接把下载链接写死的,直接链接到本地服务器的文件目录,今天QQ群有个朋 ...

最新文章

  1. 表格转化为Latex代码
  2. Docker 入门终极指南:边学边用
  3. 第五次会议记录:开始进一步需求分析,及初步分工
  4. 换脸效果媲美GAN!一文解析OpenAI最新流生成模型「Glow」
  5. emc文件存储服务器,emc存储怎么挂在linux服务器上
  6. strcmp java_C语言中strcmp的实现原型
  7. 【机器学习PAI实战】—— 玩转人工智能之美食推荐
  8. 多线程下的单例模式你真的了解吗?
  9. [转] webpack之plugin内部运行机制
  10. ProcessBuilder 创建操作系统进程
  11. VMware Workstation 安装及配置HMC V8R860
  12. 使用 hydra 破解路由器密码
  13. jquery九宫格抽奖转盘插件
  14. 51单片机和LCD1602实现简单的密码锁
  15. 小米路由 php,小米路由
  16. PHP商城缺点,多用户商城系统php语言开发的优劣?
  17. 从零实现简易播放器:4.ffmpeg 解码视频为yuv数据-使用avcodec_send_packet与avcodec_receive_frame
  18. 数字IC手撕代码-乐鑫科技笔试真题(4倍频)
  19. Apache-River 入门
  20. android 9.0 添加自定义恢复出厂设置标识

热门文章

  1. Prism.Wpf框架中WindowStartupLocation的问题
  2. java中 像素、英寸、厘米的换算
  3. android+状态栏显示图标大全,Android应用图标在状态栏上显示实现原理
  4. PostgreSQL最后的救命稻草 — pg_resetwal
  5. c语言_std=c11,关于带有std = c11 arg的c:GCC警告
  6. matlab输出图片至指定文件夹(适用于批量输出)
  7. 计算机二级WPS 选择题(模拟和解析三)
  8. Android拥有系统权限,设置允许安装未知来源的应用。
  9. 【第一章 | 操作系统概述】《操作系统 慕课版》课后答案 + 复习
  10. DSMALL商城系统