对于大文件(>5MB),使用HttpResponse下载文件时出现“正文太长”的抛出错误,这是因为HttpResponse默认的响应正文大小限制为2MB,而大文件的下载超过了这个限制。
解决这个问题的方法是通过设置HttpResponse的chunked传输方式,将文件分块传输,而不是一次性将整个文件放入响应正文中。以下是解决方案的示例代码:
from django.http import HttpResponse
from wsgiref.util import FileWrapper
import os
def download_large_file(request):
file_path = '/path/to/your/file' # 替换为实际文件路径
if os.path.exists(file_path):
file_name = os.path.basename(file_path)
response = HttpResponse(FileWrapper(open(file_path, 'rb')), content_type='application/octet-stream')
response['Content-Disposition'] = 'attachment; filename=' + file_name
response['Content-Length'] = os.path.getsize(file_path)
response['Transfer-Encoding'] = 'chunked' # 设置chunked传输方式
return response
else:
return HttpResponse('File not found.')
在上述代码中,我们使用FileWrapper将文件对象包装起来,然后通过HttpResponse返回给客户端。同时,设置了Content-Disposition为attachment,表示文件作为附件下载,Content-Length为文件大小,Transfer-Encoding为chunked。
这样,无论文件大小多大,都可以通过分块传输的方式下载,避免了“正文太长”的错误。
腾讯云相关产品推荐:
以上是针对大文件下载时出现“正文太长”错误的解决方案和腾讯云相关产品推荐。希望对您有帮助!
领取专属 10元无门槛券
手把手带您无忧上云