无法从另一个项目的GCS获取服务URL

时间:2016-12-15 10:19:06

标签: google-app-engine google-app-engine-python

我正在尝试使用GAE图像服务,但我遇到了一个问题。

我有两个项目。项目A具有GAE,项目B具有GCS桶。 这是因为创建项目后无法更改GAE区域。

当从GAE调用get_serving_url到GCS存储桶的对象时,会发生以下异常。

Traceback (most recent call last):
  ...
  File "/base/data/home/apps/b~[PROJECT_NAME]/20161215t131056.397760967541775314/main.py", line 125, in _get_serving_url
    return get_serving_url(blob_key)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/images/__init__.py", line 1868, in get_serving_url
    return rpc.get_result()
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 613, in get_result
    return self.__get_result_hook(self)
  File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/images/__init__.py", line 1972, in get_serving_url_hook
    raise _ToImagesError(e, readable_blob_key)
TransformationError

将它们放在同一个项目中时,不会抛出此异常。 GAE的服务帐户和项目A可以完全访问存储桶和对象。

还有什么我需要尝试的吗?

自解决

我在the docs of Image API in GAE/Java找到了原因。

  

重要提示:如果您通过Google云端存储提供图片,则无法通过两个单独的应用提供图片。只有在图像上调用getServingUrl的第一个应用程序才能获得提供URL的URL,因为该应用程序已获得图像的所有权。因此,随后在图像上调用getServingUrl的任何其他应用程序都将失败。如果第二个应用程序需要提供图像,则应用程序需要先复制图像,然后在副本上调用getServingUrl。

我同时使用了另一个项目中的桶的对象。

因此,我已正确验证了get_serving_url。

1 个答案:

答案 0 :(得分:0)

您不必使用服务网址。您可以为grom GCS提供文件:

https://storage.googleapis.com/your_bucket/your_filename

或SDK http://localhost:8080/_ah/gcs/your_bucket/your_filename