0

我一直在開發Express/Firebase應用程序幾周。所有一直很好,直到我遇到了以下問題:成功上傳後,Google雲端存儲刪除實體/用戶

TypeError: firebase.storage is not a function

快速搜索導致我TypeError: firebase.storage is not a function。因此,使用收集的解決方案,我成功配置了@google-cloud/storage。但後來,我遇到了:

Caller does not have storage.objects.create access to bucket example.appspot.com

後一些更多的谷歌搜索我才知道,我必須將火力管理員用戶手動添加到example.appspot.com桶上https://console.cloud.google.com/storage/

enter image description here

一旦這樣做了我測試以下內容:

bucket.upload('./package.json') 
    .then((file) => { 
    console.log(file) 
    }) 
    .catch((error) => { 
    console.log(error) 
    }) 

這很好用。當我停止Express應用程序並重新運行它以嘗試再次執行上載時,會出現問題,導致再次出現Caller does not have...錯誤。檢查區權限,我看到我之前添加的用戶已經不復存在了:

enter image description here

我不知道如果我在@google-cloud/storage包在這裏的東西,一個錯誤,或者某處的一個錯誤其他。有任何想法嗎?

回答

1

GCS認爲每次上傳都是一個全新的對象。如果對象將名稱作爲現有對象共享,則先前存在的對象將被刪除,而新的屬性(包括ACL)將與舊的屬性無關。

您可以通過幾種方法解決此問題。最簡單的方法是將Firebase存儲添加到存儲桶的「默認對象ACL」,除非另有說明,否則這將導致所有新創建的對象擁有包含該服務帳戶的ACL。在命令行,如果你安裝了gcloud SDK,你可以這樣做,像這樣:

gsutil defacl ch -u [email protected]:O gs://bucketname 

另一種選擇是明確設置ACL作爲上載的一部分,或者在之後立即。

相關問題