django后端如何给前端传文件?如何使用代码强制下载TXT文件?django如何给下载的文件命名(中文名)?

582 阅读1分钟

介绍

当前我们有一个需求,就是要给前端一个接口,让用户访问接口后能下载指定的文件。

问题

问题一(后端给前端传输文件)

实现上述问题,我们第一个需要解决的问题就是如何给前端传输文件,这个其实很简单,了解过Django或者相关web后端开发的应该都能解决。我这里使用的是from django.http import FileResponse,这里直接使用Response也是可以的。

问题二(强制下载TXT文件)

如果我们传输给前端的文件为.txt格式,我们会使用response['Content-Type'] = 'text/plain'告诉前端这是一个文本类型的文件,但这时候就会出现一个问题,我们只是单纯的设置response['Content-Type'] = 'text/plain'后文件会显示在页面中,而不会触发浏览器的下载模块。
这时候我们只需要在添加一个response['content-disposition'] = 'attachment'就可以触发浏览器的强制下载。

问题三(给下载的文件命名)

命名也很简单,我们在content-disposition中添加filename即可命名,但是这样的命名,我们的文件名只能是英文单词组成的,不能出现中文,response['content-disposition'] = f'attachment;filename={文件名}'如何设置中文的文件名,这时候就需要使用url编码,使用parse.quote(文件名)编码后的文件名即可设置为中文。

from django.http import FileResponse
# url编码模块
from urllib import parse

编码后的文件名 = parse.quote(文件名称)
response = FileResponse(文件)
# 各种文件后缀对应的Content-Type可以去下面博客中查找
# https://blog.csdn.net/judge9999/article/details/1496945
response['Content-Type'] = 文件类型
response['content-disposition'] = f'attachment;filename={编码后的文件名}'
return response