【Python】Django中关于返回文件流,根据文件类型自动生成后缀,以及消除django upload上传同名文件自带后缀

后端功能
def download(request):
 url = request.GET.get('url')  #此处是前端传过来想要访问资源的地址 127.0.0.1:8000/.../文件名.zip
 url = url.split("8000")
 url = url[1].replace("/","\\") #此处是open功能打开文件的地址
 filetype = url.split(".")
 filetype = '.' + filetype[len(filetype) - 1]  # 此处结果为.zip
 filename = url.split("\\")
 filename = filename[len(filename) - 1].split(filetype)[0].split('_')[0] #此处结果为 文件名
 path = '.' + url #此处是将文件路径修改为open功能打开文件的相对路径,根据个人项目文件位置修改
 
 response = StreamingHttpResponse(path)
 response['Content-Type'] = 'application/octet-stream'
 response['Content-Disposition'] = 'attachment;filename={file_name}{format}'.format(file_name=filename,format=filetype) #设置文件名及后缀
 return response
 
 

2022/03/25更新:
问题: 部署到windows server2016 出现问题,前端获取不到后端添加在response里的Content-Disposition,导致下载文件不成功

前端代码
let _fileName = res.headers['content-disposition'].split(';')[1].split('=')[1];

解决方法:

在原后端代码的基础上,添加一行
response["Access-Control-Expose-Headers"] = 'Content-Disposition'
return response
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值