我一直在嘗試使用 django-storages 包在 Google App Engine 上為我的 Django 應用程式實作 Google Cloud Storage(媒體檔案上傳)。我已遵循包裝給出的所有規范。我還為服務帳戶設定了相關策略和角色以訪問存盤桶,但我不斷收到錯誤訊息“匿名呼叫者沒有 storage.objects.get 訪問谷歌云存盤物件。” 嘗試查看我的 html 模板中的影像時。
當我在存盤桶設定中包含所有用戶的權限時,我只能查看模板中的影像。有誰知道如何在不讓您的存盤桶公開訪問的情況下解決此問題。
uj5u.com熱心網友回復:
請檢查您的憑據是否正確。如果您使用的是 gsutil,請檢查存盤在 .boto 檔案中的憑據是否準確。此外,通過使用命令 gsutil version -l 并檢查配置路徑條目,確認 gsutil 正在使用您期望的 .boto 檔案。
如果您使用正確的憑據,您的請求是否通過代理路由,使用 HTTP(而不是 HTTPS)?如果是這樣,請檢查您的代理是否配置為從此類請求中洗掉 Authorization 標頭。如果是這樣,請確保您的請求使用的是 HTTPS 而不是 HTTP。
您可以參考檔案進行存盤認證
您還可以另外驗證以下幾點:
在大多數情況下,默認服務帳戶不足以在 GCS 中讀取/寫入和簽署檔案,因此您需要創建一個專用服務帳戶。
創建服務帳戶。
確保您的服務帳戶有權訪問存盤桶和適當的權限。
確保此服務帳戶與正在使用的計算型別相關聯(Google Compute Engine (GCE)、Google Kubernetes Engine (GKE)、Google Cloud Run (GCR) 等)
對于開發用例或 Google 基礎架構之外的其他實體:
- 創建密鑰并下載 abc.json 檔案。
-確保密鑰已安裝/可用于您正在運行的 Django 應用程式。
- 將 GOOGLE_APPLICATION_CREDENTIALS 的環境變數設定為
json 檔案的路徑。
或者,您可以使用檔案中描述的設定 GS_CREDENTIALS
django-storages
IAM 權限
uj5u.com熱心網友回復:
我重新檢查了我的設定和存盤桶策略配置,它們都是正確的。我意識到通過將存盤桶策略設定為不可公開訪問并通過自定義服務帳戶訪問,我無法在 html 上顯示檔案(通過iframe 標記)使用源網址“https://storage.cloud.google.com/{}/'.format(GS_BUCKET_NAME)”。但是,我得到了檔案物件作為回報。我讀取了檔案的內容并對其進行了 base64 編碼,然后將檔案/影像呈現到 html 頁面上,這很有效。也許如果存盤桶策略未設定為公共,則源 url 不意味著直接訪問或在這種情況下只能通過授權的服務帳戶。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/419804.html
標籤:
