使用Django下载文件

时间:2018-04-27 14:47:13

标签: python django download

我正在尝试在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文件而不是存储在服务器上的图像。 在此试用代码中,确切的文件名和扩展名在路径变量中进行了硬编码。

1 个答案:

答案 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/