Google 云存储在成功上传后删除 entity/user
Google Cloud Storage removes entity/user after successful upload
我已经开发 Express/Firebase 应用程序几个星期了。一切正常,直到我 运行 遇到以下问题:
TypeError: firebase.storage is not a function
快速搜索让我找到了 。因此,使用那里收集的解决方案,我成功配置了 @google-cloud/storage
。但是后来,我 运行 变成了:
Caller does not have storage.objects.create access to bucket example.appspot.com
经过更多谷歌搜索后,我了解到我必须手动将我的 firebase-admin 用户添加到 https://console.cloud.google.com/storage/
上的 example.appspot.com
存储桶中
一旦完成,我将测试以下内容:
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-storage 添加到存储桶的 "default object ACL",这将导致所有新创建的对象都具有包含该服务帐户的 ACL,除非另有说明。从命令行,如果您安装了 gcloud SDK,您可以这样做:
gsutil defacl ch -u firebase-storage@system.gserviceaccount.com:O gs://bucketname
另一种选择是将 ACL 显式设置为上传的一部分或之后立即设置。
我已经开发 Express/Firebase 应用程序几个星期了。一切正常,直到我 运行 遇到以下问题:
TypeError: firebase.storage is not a function
快速搜索让我找到了 @google-cloud/storage
。但是后来,我 运行 变成了:
Caller does not have storage.objects.create access to bucket example.appspot.com
经过更多谷歌搜索后,我了解到我必须手动将我的 firebase-admin 用户添加到 https://console.cloud.google.com/storage/
上的example.appspot.com
存储桶中
一旦完成,我将测试以下内容:
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-storage 添加到存储桶的 "default object ACL",这将导致所有新创建的对象都具有包含该服务帐户的 ACL,除非另有说明。从命令行,如果您安装了 gcloud SDK,您可以这样做:
gsutil defacl ch -u firebase-storage@system.gserviceaccount.com:O gs://bucketname
另一种选择是将 ACL 显式设置为上传的一部分或之后立即设置。