[英]Django Serve Files From External Storage Directly
我有一個基於Google Cloud Platform構建的Django項目。 我們正在使用Django的auth系統,並且大多數(幾乎所有)用戶都沒有在GCP項目中設置憑據,因此所有文件身份驗證都需要基於Django而不是GCP。
我們的文件存儲后端配置非常基礎,文件按預期成功上傳到GCS:
DEFAULT_FILE_STORAGE = 'storages.backends.gcloud.GoogleCloudStorage'
GS_BUCKET_NAME = 'my-bucket'
生成的文件URL具有(同樣,如預期)的形式:
https://storage.googleapis.com/my-bucket/my-document.txt
問題是這個存儲桶無法公開讀取,因為文件具有基於Django權限系統中設置的每個用戶不同的規則的訪問控制。
如何讓Django服務文件而不是GCS服務的文件?
我想到的一個想法是擁有從GCS加載文件並將它們傳遞給請求客戶端的視圖,但我懷疑這不會很好地處理大文件,因為我需要將整個文件加載到本地內存(壞)或以塊的形式加載文件並將它們寫入這些塊中的響應流,但不知道是否可以在Django中完成。
如果您的應用程序正在決定對文件的訪問(通過Django的auth系統),那么您將必須執行您所描述的傳遞方法。
如果文件很大,您可以流式傳輸響應,而不是一次加載和發送整個響應 - 請參閱django.http.StreamingHttpResponse
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.