0

根據@ brandon-yarbrough在此SO question中提供的答案,我選擇使用簽名URL將對象上傳到雲端存儲。我產生通過google-cloud-storage庫簽署網址如下:將對象上傳到Google雲端存儲

private static Storage storage = StorageOptions.getDefaultInstance().getService(); 

URL uploadUrl = storage.signUrl(
      BlobInfo.newBuilder(IMAGE_BUCKET, fileName).build(), 
      30, 
      TimeUnit.MINUTES, 
      Storage.SignUrlOption.httpMethod(HttpMethod.PUT)); 

當我嘗試將文件上傳到生成的URL,我得到下面的錯誤。

<?xml version='1.0' encoding='UTF-8'?> 
<Error> 
    <Code>AccessDenied</Code> 
    <Message>Access denied.</Message> 
    <Details>Anonymous users does not have storage.objects.create access to bucket the-awesomest-bucket.</Details> 
</Error> 

我簽署URL的理解是,用戶不需要進行身份驗證,因此允許匿名用戶沒有我不必設置桶任何特殊權限上傳數據。我錯過了什麼嗎?

+0

您確定您的上傳請求中包含所有查詢參數嗎? –

+0

看起來我不正確地發送查詢 - 而不是發送請求作爲查詢參數,我發送它在標題。現在我看到'我們計算的請求籤名與您提供的簽名不匹配。檢查您的Google密鑰和簽名方法' – Raunak

回答

0

'content-type'參數是可選的,但是如果你沒有定義它,那麼它默認爲'binary/octet-stream'。當您嘗試上傳具有不同內容類型的圖像時,會遇到簽名不匹配。

相關問題