2010-04-30 151 views
3

从我的Django应用程序中,我想提供安全照片。这些照片不是供公众使用的,我只希望登录用户有能力查看它们。我不想依赖混淆的文件ID(给一张照片一个长号的UUID),并依赖于隐藏在我的媒体文件夹中的文件。如何将照片安全地存储在我的数据库中的磁盘上,并只将它流式传输到经过验证的会话?Django:密码保护照片网址的?

回答

2

你可以通过创建一个HttpResponse与图像的MIME类型,然后写入/复制图像文件到它。

一个简单的版本可能看起来像以下:

​​

而且,看到这个example for PDF files和上面例子PIL

+0

但显然需要你的Django应用程序做很多工作。 – 2010-12-31 12:44:46

6

使用X-Sendfile头文件告诉前端服务器实际服务器的文件。

@check_permissions 
def image(request): 
    response = HttpResponse(mimetype='image/png')  
    response['X-Sendfile'] = "/real/path/to/image.png" 
    return response 

这是related question。您还可以通过查看Satchmo如何提供DownloadableProduct对象来查看real world implementation

最后一点,nginx和lighttpd使用X-Accel-Redirect和X-LIGHTTPD-send-file来代替X-Sendfile。

+0

这似乎不适用于内置服务器。这是正确的还是我做错了什么? – Debilski 2010-05-04 15:55:51

+0

不,我想内置服务器不会支持这样的,但是再一次,它不应该用于生产。如果需要开发服务器,可能将其作为设置。 – 2010-12-31 12:46:51

+0

正确的说,X-Sendfile标头的内容基本上是一个内部重定向,它是从一个重量较轻的后端服务器发送到一个轻量级的前端服务器。 – istruble 2011-01-03 07:31:34