GCP 中关于 public 文件访问设置的潜在错误

Potential bug in GCP regarding public access settings for a file

我正在与 GCS 支持人员交谈,他们建议可能存在错误,我 post 支持小组发生了什么事。

情况

我正在尝试改编这个 Tensorflow 演示 ... https://www.tensorflow.org/hub/tutorials/tf2_arbitrary_image_stylization ... 我可以使用存储在我的 GCP 帐户中的图像。通过这个过程将我的一张图片替换为 运行。

我为 allUsers 设置的存储桶具有 public 访问权限,角色为 Storage Object Viewer

但是,该演示仍然不接受我存储在 GCS 中的文件。

例如,这个文件被拒绝: https://storage.googleapis.com/01_bucket-02/Green_Sea_Turtle_grazing_seagrass.jpeg

该文件是从演示中的示例下载的,然后上传到我的 GCS 和演示中使用的 link。但它没有被接受。我正在使用 Copy URL link.

中的 URL

回复:public可访问的数据

我一直在按照有关使数据 public 易于访问的说明进行操作。 https://cloud.google.com/storage/docs/access-control/making-data-public#code-samples_1

我已经从控制台执行了上述所有操作,但存储桶仍然没有指示 public access 有问题的存储桶。所以我不确定那里发生了什么。

请参阅我的存储桶权限设置的附加屏幕。

所以我希望您能澄清这些设置是否适合那些 public 可以访问的文件。

回复:访问演示中的数据

我也在 'Accessing public data' 上关注这篇相关文章 https://cloud.google.com/storage/docs/access-public-data#storage-download-public-object-python

有两件事我不清楚:

  1. 如果我已经设置了 public 访问方式,我还需要上面 'Access public data' 文章中的示例代码吗?
  2. 如果我确实需要将此添加到演示代码中,您能否告诉我如何找到代码的这两部分: 一种。 source_blob_name = "存储对象名称" b. destination_file_name = "local/path/to/file"

我知道上面文件的路径(01_bucket-02/Green_Sea_Turtle_grazing_seagrass.jpeg),但不明白是storage-object-name还是local/path/to/file

如果是其中之一,那么如何找到另一个值?

此外,要创建一个存储桶 public,为什么我需要声明一个单独的文件?这让我觉得代码不是必需的。

感谢您澄清任何问题或帮助解决我的困惑。

道格

问题很可能是您的 turtle 以 .jpeg 结尾,而您的图书馆正在寻找 .jpg。

您看到的错误将有助于找出问题。

If I've set public access the way I have, do I still need code as in the example on the 'Access public data' article just above?

不,你不需要。我实际上做了一些测试,我能够在 GCS 中提取图像,可以将其设置为 public 或不设置。

正如我们在此 thread 中所讨论的那样,您的项目中发生的情况是您尝试在 GCS 中提取的图像具有 .jpeg 扩展名,但实际上不是 .jpeg.实际图像在 .jpg 中,导致 TensorFlow 无法正确加载它。

按照您提到的演示和存储桶中的图像查看此测试。请注意,我使用 .jpg 作为图像的扩展名。

content_urls = dict(
  test_public='https://storage.cloud.google.com/01_bucket-02/Green_Sea_Turtle_grazing_seagrass.jpg'
  )

还测试了您存储桶中的另一个图像,它已成功加载到 TensorFlow 中。