2010-04-30 74 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