[英]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.