假设您有两个在Django中提供大文件的选项,您可以:
向公众打开媒体目录,然后直接通过Apache,Nginx等提供文件。
您可以先使用Django处理文件,然后再发送,如下所示:
from django.core.files.base import File
from django.http import HttpResponse, HttpResponseNotModified
def send_the_file(request, filename):
# Do something ...
# Send the file ...
with File(open(filename, 'rb')) as f:
response = HttpResponse(f.chunks())
return response
Django会像Apache一样从磁盘流式传输大文件吗?还是我会浪费线程和空间将整个文件读入内存?
答案 0 :(得分:0)
一般...是的。
如果使用StreamingHttpResponse
,则可能不会一次将其全部读入内存,因为您可以在发送下一个块之前对文件块进行垃圾回收。整个文件仍然会通过内存。
如果要避免将文件读取到内存中(从而避免将Django工作线程专用于请求),则应使用Django将指令传递给服务器的API,以从磁盘发送文件。该API完全取决于您的服务器。