我正在尝试在Django中下载以前上传的文件,这是我到目前为止使用的代码:
def downloadview(request):
path=os.path.join('media', 'files', '5560026113', '20180412231515.jpg' )
response = HttpResponse()
response['Content-Type']=''
response['Content-Disposition'] = "attachment; filename='Testname'"
response['X-Sendfile']=smart_str(os.path.join(path))
return response
这次试验的灵感来自this thread,但我没有让它发挥作用。下载空的txt文件而不是存储在服务器上的图像。 在此试用代码中,确切的文件名和扩展名在路径变量中进行了硬编码。
答案 0 :(得分:1)
这是一种可以通过Django提供文件的方法(尽管通常不是一种好方法,但更好的方法是使用像nginx等网络服务器来提供文件 - 出于性能原因):
(&(isUseless=Yes)(sAMAccountType=805306368))
from mimetypes import guess_type
from django.http import HttpResponse
file_path=os.path.join('media', 'files', '5560026113', '20180412231515.jpg' )
with open(file_path, 'rb') as f:
response = HttpResponse(f, content_type=guess_type(file_path)[0])
response['Content-Length'] = len(response.content)
return response
从文件扩展名中推断出content_type。
https://docs.python.org/3/library/mimetypes.html
更多关于HttpResponse:https://docs.djangoproject.com/en/2.0/ref/request-response/#django.http.HttpResponse
这就是为什么不建议通过Django提供文件的原因,虽然不推荐只是意味着你应该理解你在做什么: https://docs.djangoproject.com/en/2.0/howto/static-files/deployment/