成功上传后,Google云端存储删除实体/用户

成功上传后,Google云端存储删除实体/用户

问题描述:

我一直在开发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包在这里的东西,一个错误,或者某处的一个错误其他。有任何想法吗?

GCS认为每次上传都是一个全新的对象。如果对象将名称作为现有对象共享,则先前存在的对象将被删除,而新的属性(包括ACL)将与旧的属性无关。

您可以通过几种方法解决此问题。最简单的方法是将Firebase存储添加到存储桶的“默认对象ACL”,除非另有说明,否则这将导致所有新创建的对象拥有包含该服务帐户的ACL。在命令行,如果你安装了gcloud SDK,你可以这样做,像这样:

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

另一种选择是明确设置ACL作为上载的一部分,或者在之后立即。