亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

讓Django提供可下載的文件

讓Django提供可下載的文件

LEATH 2019-06-25 16:22:45
讓Django提供可下載的文件我希望網站上的用戶能夠下載路徑模糊的文件,這樣他們就不能直接下載。例如,我希望URL是這樣的,“http://example.com/download/?f=somefile.txt在服務器上,我知道所有可下載的文件都位于一個文件夾“/home/user/files/”中。有什么方法可以讓Django為下載文件提供服務,而不是試圖找到一個URL和View來顯示它呢?
查看完整描述

3 回答

?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

對于“兩個世界中最好的”,您可以將S.Lott的解決方案與xsendfile模塊:Django生成文件(或文件本身)的路徑,但實際文件由Apache/Lightttpd處理。一旦設置了mod_xsendfile,與視圖的集成需要幾行代碼:

from?django.utils.encoding?import?smart_str

response?=?HttpResponse(mimetype='application/force-download')?#?mimetype?is?replaced?by?content_type?for?django?1.7response['Content-Disposition']?=?'attachment;?filename=%s'?%?smart_str(file_name)response['X-Sendfile']?=?smart_str(path_to_file)#?It's?usually?a?good?idea?to?set?the?'Content-Length'?header?too.#?You?can?also?set?any?other?required?headers:?Cache-Control,?etc.return?response

當然,只有當您控制您的服務器,或者您的托管公司已經設置mod_xsendfile時,這才能工作。

編輯:

mimetype被Django 1.7的content_type替換

response?=?HttpResponse(content_type='application/force-download'


查看完整回答
反對 回復 2019-06-25
?
烙印99

TA貢獻1829條經驗 獲得超13個贊

對于一個非常簡單的但沒有效率或可伸縮性解決方案,您可以只使用Django中構建的serve視野。對于快速原型或一次性工作來說,這是很好的,但是正如在整個問題中所提到的,您應該在生產中使用類似Apache或nginx之類的東西。

from django.views.static import serve
filepath = '/some/path/to/local/file.txt'return serve(request, os.path.basename(filepath), os.path.dirname(filepath))


查看完整回答
反對 回復 2019-06-25
  • 3 回答
  • 0 關注
  • 1198 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號