今天学了FileResponse,这模块太棒了,学完之后我已经开始幻想未来我在后端是什么样子了,想想都流口水。
FileResponse
FileResponse 是 StreamingHttpResponse 的子类 拥有自动分段,自动迭代的功能,适合二进制文件传输,常用的传输文件格式包括py、txt、jpg、png、gif、docx、xlsx、mp3、mp4等。
我们结合代码看一下。
from django.http import FileResponse
def download(request):
response = FileResponse(open(r"yinyue.mp3", "rb"))
response['Content-Type'] = 'application/octet-stream'
response['Content-Disposition'] = "attachment;filename=music.mp3" # 注意filename不支持中文
return response
在视图中定义download函数,注意必须要以request作为参数,同时需要导入 FileResponse 模块。使用 FileResponse 读取文件时直接使用open函数即可,无需使用with open 的方法。这里有两个特定的MIME标记 Content-Type 与 Content-Disposition,第一个是指定文件类型,第二个是用于指定文件下载的名称,注意有attachment参数,以及filename不支持中文名(暂时我了解的是这样)。
最后,如果指定文件路径时是使用相对路径的话就要格外的注意了,相对路径应该是相对manage.py而言的,而不是相对于view函数。
因为MP3跟manage.py处在同一级目录,所以直接引用就完事。噢对了,读写的时候要二进制读写即rb,而不要写成r。