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

例如,我希望URL是这样的: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') # django 1.7的mimetype被content_类型取代
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

当然,这只有在你控制了你的服务器,或者你的托管公司已经设置了modxsendfile的情况下才有效.

EDIT:

django 1.7的mimetype被content_类型取代

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

EDIT: 对于nginx判断this,它使用X-Accel-Redirect而不是apache X-Sendfile头.

Python相关问答推荐

如何根据日期和时间将状态更新为已过期或活动?

提取两行之间的标题的常规表达

通过优化空间在Python中的饼图中添加标签

仿制药的类型铸造

如何将双框框列中的成对变成两个新列

对整个 pyramid 进行分组与对 pyramid 列子集进行分组

未删除映射表的行

删除字符串中第一次出现单词后的所有内容

如何在python polars中停止otherate(),当使用when()表达式时?

Pandas:将多级列名改为一级

给定高度约束的旋转角解析求解

根据列值添加时区

joblib:无法从父目录的另一个子文件夹加载转储模型

如何在turtle中不使用write()来绘制填充字母(例如OEG)

索引到 torch 张量,沿轴具有可变长度索引

将pandas导出到CSV数据,但在此之前,将日期按最小到最大排序

将scipy. sparse矩阵直接保存为常规txt文件

判断Python操作:如何从字面上得到所有decorator ?

如何在Python中自动创建数字文件夹和正在进行的文件夹?

正在try 让Python读取特定的CSV文件