后端功能
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