代码之家  ›  专栏  ›  技术社区  ›  tchiot.ludo

如何使用Python3.7在Google App Engine标准环境中签署Google云存储的url?

  •  0
  • tchiot.ludo  · 技术社区  · 7 年前

    我找不到在Python3.7的Google App Engine标准环境中有工作签名url的方法。

    我看了这里的文档: https://cloud.google.com/storage/docs/access-control/signing-urls-manually

    在Google App Engine应用程序中,您可以使用 App Engine App Identity 签名服务。

    但是应用程序引擎的应用程序身份依赖于 google.appengine 包,这在python 3.7env上不可用 here

    Python3中不提供专有的应用程序引擎API。本节列出了建议的替换项。

    总的目标是你的应用程序应该是完全可移植的,并且可以在任何标准的Python环境中运行。您编写的是标准的Python应用程序,而不是app Engine Python应用程序。作为这一转变的一部分,您不再需要为应用程序的核心功能使用专有的应用程序引擎api和服务。此时,Python3.7运行时中不提供应用程序引擎API。

    sdk上的所有api都依赖于 并在python 3.7env上引发异常: EnvironmentError('The App Engine APIs are not available.') 提升 here 依赖于专有api:

    try:
        from google.appengine.api import app_identity
    except ImportError:
        app_identity = None
    

    我知道我可以用很多方法 ServiceAccountCredentials.from_json_keyfile_dict(service_account_dict)

    我真的想像其他Google云api一样依赖app engine的默认凭证 storage.Client() 例如,开箱即用。

    有什么建议吗?

    0 回复  |  直到 7 年前
        1
  •  1
  •   Pawel Czuczwara    7 年前

    对于Python与Google云的交互使用 Python Client 这在App Engine标准Python 3运行时上受支持。

    要使用App Engine Standard中的google云存储访问云存储,请执行以下操作:

    1. 将依赖项添加到requirements.txt>google cloud storage==1.14.0
    2. Storage Client library ,身份验证 storage.Client() 只有。

    1. 允许匿名访问存储在bucket中的公共数据。
    2. 用于签名的URL API调用 Method: projects.serviceAccounts.signBlob . 文档包括示例:

    也可以 sign blobs with appengine api 使用:

    google.appengine.api.app_identity.sign_blob()