让Django提供可下载的文件

我希望网站上的用户能够下载路径模糊的文件,这样就不能直接下载

例如,我希望URL是这样的:http://example.com/download/?f=somefile.txt

在服务器上,我知道所有可下载的文件都位于文件夹/home/user/files/

有没有办法让Django提供该文件供下载,而不是试图找到URL并查看以显示它

为了“两全其美”,您可以将S.Lott的解决方案与xsendfile模块结合起来:django生成文件(或文件本身)的路径,但实际的文件服务由Apache/Lighttpd处理。设置modxsendfile后,与视图集成需要几行代码:

来自django.utils.encoding的

导入智能\u str
response=HttpResponse(mimetype='application/force download')#django 1.7的mimetype被content_类型替换
响应['Content-Disposition']='附件;文件名=%s“%smart\u str(文件名)
响应['X-Sendfile']=smart\u str(路径到文件)
#通常设置“内容长度”标题也是个好主意。
#您还可以设置任何其他必需的头:缓存控制等。
返回响应

当然,只有当您控制了服务器,或者您的托管公司已经设置了modxsendfile时,这才有效

编辑:

django 1.7的mimetype被content_类型替换

response=HttpResponse(content\u type='application/force download')

编辑:
对于nginx选中此项,它使用X-Accel-Redirect而不是apacheX-Sendfile头

发表评论