一、下载文件

1. 设置浏览器需要的content-type

下面是python的content-type对照字典:

Content_Type = {'.*': 'application/octet-stream','.tif': 'application/x-tif','.001': 'application/x-001','.301': 'application/x-301','.323': 'text/h323','.906': 'application/x-906','.907': 'drawing/907','.a11': 'application/x-a11','.acp': 'audio/x-mei-aac','.ai': 'application/postscript','.aif': 'audio/aiff','.aifc': 'audio/aiff','.aiff': 'audio/aiff','.anv': 'application/x-anv','.asa': 'text/asa','.asf': 'video/x-ms-asf','.asp': 'text/asp','.asx': 'video/x-ms-asf','.au': 'audio/basic','.avi': 'video/avi','.awf': 'application/vnd.adobe.workflow','.biz': 'text/xml','.bmp': 'application/x-bmp','.bot': 'application/x-bot','.c4t': 'application/x-c4t','.c90': 'application/x-c90','.cal': 'application/x-cals','.cat': 'application/vnd.ms-pki.seccat','.cdf': 'application/x-netcdf','.cdr': 'application/x-cdr','.cel': 'application/x-cel','.cer': 'application/x-x509-ca-cert','.cg4': 'application/x-g4','.cgm': 'application/x-cgm','.cit': 'application/x-cit','.class': 'java/*','.cml': 'text/xml','.cmp': 'application/x-cmp','.cmx': 'application/x-cmx','.cot': 'application/x-cot','.crl': 'application/pkix-crl','.crt': 'application/x-x509-ca-cert','.csi': 'application/x-csi','.css': 'text/css','.cut': 'application/x-cut','.dbf': 'application/x-dbf','.dbm': 'application/x-dbm','.dbx': 'application/x-dbx','.dcd': 'text/xml','.dcx': 'application/x-dcx','.der': 'application/x-x509-ca-cert','.dgn': 'application/x-dgn','.dib': 'application/x-dib','.dll': 'application/x-msdownload','.doc': 'application/msword','.docx': 'application/msword','.dot': 'application/msword','.drw': 'application/x-drw','.dtd': 'text/xml','.dwf': 'application/x-dwf','.dwg': 'application/x-dwg','.dxb': 'application/x-dxb','.dxf': 'application/x-dxf','.edn': 'application/vnd.adobe.edn','.emf': 'application/x-emf','.eml': 'message/rfc822','.ent': 'text/xml','.epi': 'application/x-epi','.eps': 'application/postscript','.etd': 'application/x-ebx','.exe': 'application/x-msdownload','.fax': 'image/fax','.fdf': 'application/vnd.fdf','.fif': 'application/fractals','.fo': 'text/xml','.frm': 'application/x-frm','.g4': 'application/x-g4','.gbr': 'application/x-gbr','.': 'application/x-','.gif': 'image/gif','.gl2': 'application/x-gl2','.gp4': 'application/x-gp4','.hgl': 'application/x-hgl','.hmr': 'application/x-hmr','.hpg': 'application/x-hpgl','.hpl': 'application/x-hpl','.hqx': 'application/mac-binhex40','.hrf': 'application/x-hrf','.hta': 'application/hta','.htc': 'text/x-component','.htm': 'text/html','.html': 'text/html','.htt': 'text/webviewhtml','.htx': 'text/html','.icb': 'application/x-icb','.ico': 'application/x-ico','.iff': 'application/x-iff','.ig4': 'application/x-g4','.igs': 'application/x-igs','.iii': 'application/x-iphone','.img': 'application/x-img','.ins': 'application/x-internet-signup','.isp': 'application/x-internet-signup','.IVF': 'video/x-ivf','.java': 'java/*','.jfif': 'image/jpeg','.jpe': 'application/x-jpe','.jpeg': 'image/jpeg','.jpg': 'image/jpeg','.js': 'application/x-javascript','.jsp': 'text/html','.la1': 'audio/x-liquid-file','.lar': 'application/x-laplayer-reg','.latex': 'application/x-latex','.lavs': 'audio/x-liquid-secure','.lbm': 'application/x-lbm','.lmsff': 'audio/x-la-lms','.ls': 'application/x-javascript','.ltr': 'application/x-ltr','.m1v': 'video/x-mpeg','.m2v': 'video/x-mpeg','.m3u': 'audio/mpegurl','.m4e': 'video/mpeg4','.mac': 'application/x-mac','.man': 'application/x-troff-man','.math': 'text/xml','.mdb': 'application/x-mdb','.mfp': 'application/x-shockwave-flash','.mht': 'message/rfc822','.mhtml': 'message/rfc822','.mi': 'application/x-mi','.mid': 'audio/mid','.midi': 'audio/mid','.mil': 'application/x-mil','.mml': 'text/xml','.mnd': 'audio/x-musicnet-download','.mns': 'audio/x-musicnet-stream','.mocha': 'application/x-javascript','.movie': 'video/x-sgi-movie','.mp1': 'audio/mp1','.mp2': 'audio/mp2','.mp2v': 'video/mpeg','.mp3': 'audio/mp3','.mp4': 'video/mpeg4','.mpa': 'video/x-mpg','.mpd': 'application/vnd.ms-project','.mpe': 'video/x-mpeg','.mpeg': 'video/mpg','.mpg': 'video/mpg','.mpga': 'audio/rn-mpeg','.mpp': 'application/vnd.ms-project','.mps': 'video/x-mpeg','.mpt': 'application/vnd.ms-project','.mpv': 'video/mpg','.mpv2': 'video/mpeg','.mpw': 'application/vnd.ms-project','.mpx': 'application/vnd.ms-project','.mtx': 'text/xml','.mxp': 'application/x-mmxp','.net': 'image/pnetvue','.nrf': 'application/x-nrf','.nws': 'message/rfc822','.odc': 'text/x-ms-odc','.out': 'application/x-out','.p10': 'application/pkcs10','.p12': 'application/x-pkcs12','.p7b': 'application/x-pkcs7-certificates','.p7c': 'application/pkcs7-mime','.p7m': 'application/pkcs7-mime','.p7r': 'application/x-pkcs7-certreqresp','.p7s': 'application/pkcs7-signature','.pc5': 'application/x-pc5','.pci': 'application/x-pci','.pcl': 'application/x-pcl','.pcx': 'application/x-pcx','.pdf': 'application/pdf','.pdx': 'application/vnd.adobe.pdx','.pfx': 'application/x-pkcs12','.pgl': 'application/x-pgl','.pic': 'application/x-pic','.pko': 'application/vnd.ms-pki.pko','.pl': 'application/x-perl','.plg': 'text/html','.pls': 'audio/scpls','.plt': 'application/x-plt','.png': 'image/png','.pot': 'application/vnd.ms-powerpoint','.ppa': 'application/vnd.ms-powerpoint','.ppm': 'application/x-ppm','.pps': 'application/vnd.ms-powerpoint','.ppt': 'application/x-ppt','.pr': 'application/x-pr','.prf': 'application/pics-rules','.prn': 'application/x-prn','.prt': 'application/x-prt','.ps': 'application/postscript','.ptn': 'application/x-ptn','.pwz': 'application/vnd.ms-powerpoint','.r3t': 'text/vnd.rn-realtext3d','.ra': 'audio/vnd.rn-realaudio','.ram': 'audio/x-pn-realaudio','.ras': 'application/x-ras','.rat': 'application/rat-file','.rdf': 'text/xml','.rec': 'application/vnd.rn-recording','.red': 'application/x-red','.rgb': 'application/x-rgb','.rjs': 'application/vnd.rn-realsystem-rjs','.rjt': 'application/vnd.rn-realsystem-rjt','.rlc': 'application/x-rlc','.rle': 'application/x-rle','.rm': 'application/vnd.rn-realmedia','.rmf': 'application/vnd.adobe.rmf','.rmi': 'audio/mid','.rmj': 'application/vnd.rn-realsystem-rmj','.rmm': 'audio/x-pn-realaudio','.rmp': 'application/vnd.rn-rn_music_package','.rms': 'application/vnd.rn-realmedia-secure','.rmvb': 'application/vnd.rn-realmedia-vbr','.rmx': 'application/vnd.rn-realsystem-rmx','.rnx': 'application/vnd.rn-realplayer','.rp': 'image/vnd.rn-realpix','.rpm': 'audio/x-pn-realaudio-plugin','.rsml': 'application/vnd.rn-rsml','.rt': 'text/vnd.rn-realtext','.rtf': 'application/x-rtf','.rv': 'video/vnd.rn-realvideo','.sam': 'application/x-sam','.sat': 'application/x-sat','.sdp': 'application/sdp','.sdw': 'application/x-sdw','.sit': 'application/x-stuffit','.slb': 'application/x-slb','.sld': 'application/x-sld','.slk': 'drawing/x-slk','.smi': 'application/smil','.smil': 'application/smil','.smk': 'application/x-smk','.snd': 'audio/basic','.sol': 'text/plain','.sor': 'text/plain','.spc': 'application/x-pkcs7-certificates','.spl': 'application/futuresplash','.spp': 'text/xml','.ssm': 'application/streamingmedia','.sst': 'application/vnd.ms-pki.certstore','.stl': 'application/vnd.ms-pki.stl','.stm': 'text/html','.sty': 'application/x-sty','.svg': 'text/xml','.swf': 'application/x-shockwave-flash','.tdf': 'application/x-tdf','.tg4': 'application/x-tg4','.tga': 'application/x-tga','.tiff': 'image/tiff','.tld': 'text/xml','.top': 'drawing/x-top','.torrent': 'application/x-bittorrent','.tsd': 'text/xml','.txt': 'text/plain','.uin': 'application/x-icq','.uls': 'text/iuls','.vcf': 'text/x-vcard','.vda': 'application/x-vda','.vdx': 'application/vnd.visio','.vml': 'text/xml','.vpg': 'application/x-vpeg005','.vsd': 'application/x-vsd','.vss': 'application/vnd.visio','.vst': 'application/x-vst','.vsw': 'application/vnd.visio','.vsx': 'application/vnd.visio','.vtx': 'application/vnd.visio','.vxml': 'text/xml','.wav': 'audio/wav','.wax': 'audio/x-ms-wax','.wb1': 'application/x-wb1','.wb2': 'application/x-wb2','.wb3': 'application/x-wb3','.wbmp': 'image/vnd.wap.wbmp','.wiz': 'application/msword','.wk3': 'application/x-wk3','.wk4': 'application/x-wk4','.wkq': 'application/x-wkq','.wks': 'application/x-wks','.wm': 'video/x-ms-wm','.wma': 'audio/x-ms-wma','.wmd': 'application/x-ms-wmd','.wmf': 'application/x-wmf','.wml': 'text/vnd.wap.wml','.wmv': 'video/x-ms-wmv','.wmx': 'video/x-ms-wmx','.wmz': 'application/x-ms-wmz','.wp6': 'application/x-wp6','.wpd': 'application/x-wpd','.wpg': 'application/x-wpg','.wpl': 'application/vnd.ms-wpl','.wq1': 'application/x-wq1','.wr1': 'application/x-wr1','.wri': 'application/x-wri','.wrk': 'application/x-wrk','.ws': 'application/x-ws','.ws2': 'application/x-ws','.wsc': 'text/scriptlet','.wsdl': 'text/xml','.wvx': 'video/x-ms-wvx','.xdp': 'application/vnd.adobe.xdp','.xdr': 'text/xml','.xfd': 'application/vnd.adobe.xfd','.xfdf': 'application/vnd.adobe.xfdf','.xhtml': 'text/html','.xls': 'application/x-xls','.xlw': 'application/x-xlw','.xml': 'text/xml','.xpl': 'audio/scpls','.xq': 'text/xml','.xql': 'text/xml','.xquery': 'text/xml','.xsd': 'text/xml','.xsl': 'text/xml','.xslt': 'text/xml','.xwd': 'application/x-xwd','.x_b': 'application/x-x_b','.sis': 'application/vnd.symbian.install','.sisx': 'application/vnd.symbian.install','.x_t': 'application/x-x_t','.ipa': 'application/vnd.iphone','.apk': 'application/vnd.android.package-archive','.xap': 'application/x-silverlight-app'
}

2. 实现原理

首先使用open(file_path,"rb")以二进制的形式打开一个文件,权限为只读,然后就可以将获取到的file使用FileResponse包起来,然后设置Content-type='application/octet-stream', Content-Disposition='attachment;filename=+filename。

from django.http import FileResponse
import requests# 下载附件
def file_down(request, uid=None):...response = FileResponse(file)response['Content-Type'] = 'application/octet-stream'response['Content-Disposition'] = 'attachment;filename=' + file_namereturn response

二、解决中文文件乱码下载不出来的问题

在下载时,如果我们用的是中文的文件名,那么响应头里的Content-Disposition出现了一串乱码,如下图:

1. 问题原因

浏览器对响应头里的Content-Disposition里的含有中文的内容无法识别,因此出现了乱码。

2. 解决方式

我们可以使用urllib对文件名进行编码, 编码格式使用utf-8即可。

from urllib import parseresponse['Content-Type'] = 'application/octet-stream'
response['Content-Disposition'] = 'attachment;filename=' + parse.quote(file_name, encoding="utf-8")

python-django解决浏览器中文文件名乱码下载不出来文件的问题相关推荐

  1. 压缩文件打开其中“中文”文件名乱码

    压缩文件打开其中"中文"文件名乱码 只因为压缩文件"名称加密"的锅 解决办法 1.打开压缩文件 2.选择"选项/名称加密"在其中选择&quo ...

  2. 解决浏览器下载文件时中文文件名乱码的问题

    解决浏览器下载文件时中文文件名乱码的问题 很多时候我们需要在后台为前端提供文件下载的功能,但是当文件名中有中文时我们不能直接将文件名返回,需要对中文的文件名进行处理后再返回. 一.文件下载contro ...

  3. 解决文件下载在火狐浏览器出现中文文件名乱码的方法

    解决文件下载在火狐浏览器出现中文文件名乱码的方法 参考文章: (1)解决文件下载在火狐浏览器出现中文文件名乱码的方法 (2)https://www.cnblogs.com/zeng1994/p/739 ...

  4. python打开中文文件名_解决python打开中文文件名乱码的问题

    解决python打开中文文件名乱码的问题 发布时间:2020-07-27 11:20:22 来源:亿速云 阅读:162 作者:清晨 小编给大家分享一下解决python打开中文文件名乱码的问题,相信大部 ...

  5. response setHeader 设置下载中文文件名乱码问题

    1. HTTP消息头 (1)通用信息头 即能用于请求消息中,也能用于响应信息中,但与被传输的实体内容没有关系的信息头,如Data,Pragma 主要: Cache-Control , Connecti ...

  6. response.setHeader()设置下载中文文件名乱码问题

    1. HTTP消息头 (1)通用信息头 即能用于请求消息中,也能用于响应信息中,但与被传输的实体内容没有关系的信息头,如Data,Pragma 主要: Cache-Control , Connecti ...

  7. php excel中文名称乱码,phpexcel导出中文文件名乱码的解决办法

    使用phpexcel类库导出excel文件,文件名为中文时,在chrome浏览器下导出正常,在IE内核浏览器下导出文件名显示乱码,解决办法就是通过iconv函数转换编码,从utf-8转为gb2312, ...

  8. linux 文件夹 乱码,linux中文文件名乱码解决

    原标题:linux中文文件名乱码解决 由于安装英文版的系统不支持中文,出现中文文件名乱码.下面操作时在centos上安装中文支持. 1)先下载并安装两个语言包: fonts-chinese-3.02- ...

  9. 解决文件上传时,服务器中中文文件名乱码问题

    解决文件上传时,服务器中中文文件名乱码问题 参考文章: (1)解决文件上传时,服务器中中文文件名乱码问题 (2)https://www.cnblogs.com/yang-xiansen/p/11167 ...

最新文章

  1. 怎么解决线上CPU100%的问题
  2. html 中 标签里面的id 和 name 有什么区别?
  3. android 获取sd卡目录失败_获取sd卡存储路径失败
  4. php html 停止工作,换行符php和html无法正常工作
  5. idea怎么跳转到源代码_mooc-IDEA 项目/文件之间跳转--002
  6. python2和3通用的头文件写法 不确定是否叫头文件 这种说法 大概就是这个意思
  7. pytorch: 网络层参数初始化
  8. 网络蜘蛛的基本原理--转载
  9. c#编写闭合导线简易平差程序
  10. PG性能调校(二):数据库硬件及基准评测
  11. php1蛋白质带电情况,拿到一个蛋白以后,首先需要对蛋白进行全面的了解,所谓知彼知己方能百战不殆:...
  12. U盘没有文件但空间被占用解决办法(U盘文件夹隐藏恢复)
  13. hadoop集群搭建详述
  14. opencv-python中 boundingRect(cnt)以及cv2.rectangle用法
  15. 雷达原理-雷达发射机
  16. mysql数据库主机名是什么_mysql数据库主机名是什么
  17. 数学物理方法 05 留数定理
  18. 详解PROFINET通讯协议
  19. 问题解决:pycharm pip无法更新,显示更新成功,但版本依然是旧版本
  20. 三路DI和十路DO继电器输出,RS-485/232远程I/O模块 WJ71

热门文章

  1. 十大经典排序算法-归并排序算法详解
  2. 手机chrome书签文件导出教程
  3. 谷歌、微软都在做付费网盘,为何只有百度饱受争议?
  4. golang安装详解
  5. 【梯度下降在波士顿房价预测中的应用】
  6. 物流英语与计算机操作,物流英语与计算机模拟题.doc
  7. 北京市2008年住房建设计划
  8. 【Power BI】部分复杂图表名称整理(持续更新)
  9. Numpy常用函数(手册)
  10. 计算机组成原理:绪论与数据表示