簡體   English   中英

通過Django中的視圖提供靜態文件

[英]Serve static files through a view in Django

我正在編寫一個Django應用程序,可以讓您在滿足某些要求后下載文件(例如,必須登錄)。 否則該文件將不可訪問。

通過Apache服務文件不起作用:我必須在數據庫中簽入用戶權限。 此外,沒有權限更改我的Apache配置。

因此,我想在Django中讀取文件,然后設置適當的標頭並將其發送給客戶端。

我使用了Django手冊中頁上的信息作為標題。

我有以下代碼:

#<- check persmissons here, continue if allowed ->

#read the pdf file
location = 'file.pdf'
file = open(location, 'r')
content = file.read()
file.close

#serve the file
response = HttpResponse(content, mimetype='application/pdf')
response['Content-Disposition'] = 'attachment; filename=filename.pdf'

return response

但是,下載的文件似乎已損壞:無法在Adobe Reader中打開。 我在想這可能是一些編碼問題,但我無法弄清楚。

任何幫助表示贊賞:)

您必須以二進制模式open()文件(請考慮docs )。

像這樣:

file = open(location, 'rb')

我不知道它是否適用於您(因為不允許您更改Apache的設置),但是出於性能原因,我建議使用Lighttpd + mod_secdownload 這個優雅的解決方案利用Lighttpd的優化來提供靜態內容,同時將授權決策委派給第三方(在您的情況下為Django)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM