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

该博客介绍了在Windows Server 2016上部署后端服务时遇到的一个问题,即前端无法获取到后端设置的Content-Disposition响应头,导致文件下载失败。作者提供了一个解决方案,在后端代码中添加了'Access-Control-Expose-Headers'字段,允许跨域访问Content-Disposition头,从而解决了下载问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

后端功能
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值