成功上传后,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/
一旦这样做了我测试以下内容:
bucket.upload('./package.json')
.then((file) => {
console.log(file)
})
.catch((error) => {
console.log(error)
})
这很好用。当我停止Express应用程序并重新运行它以尝试再次执行上载时,会出现问题,导致再次出现Caller does not have...
错误。检查区权限,我看到我之前添加的用户已经不复存在了:
我不知道如果我在@google-cloud/storage
包在这里的东西,一个错误,或者某处的一个错误其他。有任何想法吗?
GCS认为每次上传都是一个全新的对象。如果对象将名称作为现有对象共享,则先前存在的对象将被删除,而新的属性(包括ACL)将与旧的属性无关。
您可以通过几种方法解决此问题。最简单的方法是将Firebase存储添加到存储桶的“默认对象ACL”,除非另有说明,否则这将导致所有新创建的对象拥有包含该服务帐户的ACL。在命令行,如果你安装了gcloud SDK,你可以这样做,像这样:
gsutil defacl ch -u [email protected]:O gs://bucketname
另一种选择是明确设置ACL作为上载的一部分,或者在之后立即。