簡體   English   中英

Django直接從外部存儲服務文件

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

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