让Django提供可下载的文件

问题:

我希望网站上的用户能够下载其路径被遮掩的文件,因此无法直接下载。
例如,我希望网址是这样的,“http://example.com/download/?f=somefile.txt
而在服务器上,我知道所有可下载的文件都位于一个文件夹“/ home / user / files /”中。
有没有办法使Django提供该文件下载,而不是试图找到一个URL和视图来显示它?

回答:

对于“最好的两个世界”,您可以将S.Lott的解决方案与xsendfile module组合:django生成文件(或文件本身)的路径,但实际的文件服务由Apache / Lighttpd处理。一旦你设置了mod_xsendfile,与你的视图集成就需要几行代码:

from django.utils.encoding import smart_str

response = HttpResponse(mimetype='application/force-download') # mimetype is replaced by content_type for django 1.7
response['Content-Disposition'] = 'attachment; filename=%s' % smart_str(file_name)
response['X-Sendfile'] = smart_str(path_to_file)
# It's usually a good idea to set the 'Content-Length' header too.
# You can also set any other required headers: Cache-Control, etc.
return response

当然,这只有在您控制服务器或您的托管公司已经设置了mod_xsendfile的情况下才有效。
 编辑:

mimetype被django 1.7的content_type所替代

response = HttpResponse(content_type='application/force-download'

 
 Code问答: codewenda.com
Stackoverflow:Having Django serve downloadable files

发表评论

电子邮件地址不会被公开。 必填项已用*标注

15 − 10 =