我希望网站上的用户能够下载文件,但文件路径被模糊处理,以防止其直接下载。
例如,我希望URL看起来像这样:http://example.com/download/?f=somefile.txt
在服务器上,我知道所有可下载的文件都存储在文件夹/home/user/files/
中。
是否有一种方法可以让Django提供该文件以供下载,而不是试图查找URL和View以将其显示出来?
我希望网站上的用户能够下载文件,但文件路径被模糊处理,以防止其直接下载。
例如,我希望URL看起来像这样:http://example.com/download/?f=somefile.txt
在服务器上,我知道所有可下载的文件都存储在文件夹/home/user/files/
中。
是否有一种方法可以让Django提供该文件以供下载,而不是试图查找URL和View以将其显示出来?
另一个值得一看的项目:http://readthedocs.org/docs/django-private-files/en/latest/usage.html。看起来很有前途,但我自己还没有测试过。
基本上,该项目抽象了mod_xsendfile配置,并允许您执行以下操作:
from django.db import models
from django.contrib.auth.models import User
from private_files import PrivateFileField
def is_owner(request, instance):
return (not request.user.is_anonymous()) and request.user.is_authenticated and
instance.owner.pk = request.user.pk
class FileSubmission(models.Model):
description = models.CharField("description", max_length = 200)
owner = models.ForeignKey(User)
uploaded_file = PrivateFileField("file", upload_to = 'uploads', condition = is_owner)
我曾经多次遇到同样的问题,因此使用了xsendfile模块和auth视图装饰器来实现django-filelibrary。请随意将其用作您自己解决方案的灵感。
我曾经做过一个关于这个的项目。你可以看看我的 Github 仓库:
https://github.com/nishant-boro/django-rest-framework-download-expert
这个模块提供了一种简单的方式,在Django Rest Framework中使用Apache模块Xsendfile来提供文件下载。它还具有一个额外的功能,只向属于特定组的用户提供下载服务。
使用 https://github.com/johnsensible/django-sendfile 提供对静态 HTML 文件夹的受保护访问:https://gist.github.com/iutinvg/9907731