3

尝试将图像从服务器上传到服务器我得到:

[ { 域:'global',原因:'forbidden',消息:'googlec-storage-object-creator@project-name.iam.gserviceaccount.com 没有 storage.objects.delete 访问 bucket-mybucket/mypicture。 .jpg。} ],代码:403,

如果图像名称不同,则可以正常工作。版本控制已暂停,并且有一个具有该名称的文件,但已被删除。

我什至删除了存储桶并再次创建它,但问题仍然存在。

如果文件名与“mypicture.jpg”不同,则完全没有错误

有什么帮助吗?谢谢

4

2 回答 2

7

我做了和 OP 一样的事情,为此花了很多时间,我从github 上的google cloud node中找到了帖子。

由 stephenplusplus

我有一种感觉,这是由于 gcs-resumable-upload 中的一个问题,这个方法背后的模块。有一个修复了 PR:stephenplusplus/gcs-resumable-upload#23

同时,您可以尝试:

禁用可恢复上传:gcs_file.createWriteStream({ resumable: false }) 删除 gcs-resumable-upload 用于跟踪上传状态的缓存文件:~/.config/configstore/gcs-resumable-upload.json 如果两者都不是工作,我们手上可能有不同的问题。让我知道,很抱歉你遇到了这个!

只需禁用WriteableStream 上的可恢复更新,即可享受新世界。

于 2018-06-19T10:37:25.390 回答
2

如果我正确理解了您的问题,您正在尝试使用您拥有storage.objectCreator角色权限mypicture.jpg的服务帐户将文件上传到您的其中一个存储桶。bucket-mybucket

显示的错误消息让我明白已经有一个文件mypicture.jpg,并且您正在尝试覆盖它,这需要storage.objects.delete权限,而我认为您正在使用的角色未授予该权限。

有几点可以涵盖:

  1. 您是否尝试向您正在使用的服务帐户授予所需的删除权限?
  2. 您说您删除了已使用该名称存在的文件。您使用具有适当权限的不同服务帐户进行了此操作,对吗?您是否尝试过使用该服务帐户上传文件?您是在禁用版本控制之前还是之后删除它?
  3. 当您说您删除了存储桶并再次创建它时,您的意思是您试图将文件上传到新创建的文件(完全为空且没有其他先前版本mypicture.jpg)并且它也失败了?
  4. 使用具有适当权限的服务帐户,运行命令gsutil ls -L gs://BUCKET_NAME/FILE_NAME以查看其元数据,并检查该文件中是否还有任何可能存在冲突并需要删除 权限的剩余内容。
  5. 禁用对象版本控制只会停止未来的归档。如果您在删除对象禁用了对象版本控制,GCS 中仍会保留一些存档版本,因此您应该手动删除它们。您可以使用命令列出归档版本gsutil ls -a gs://BUCKET_NAME
  6. 如果这些都不起作用,您将如何尝试上传?gsutilCLI 工具、客户端库...?
于 2018-04-02T14:05:20.063 回答