googleappengine标准中拒绝了googlecloudstorage权限

2024-06-09 16:41:52 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试使用client library for Python从googleappengine标准运行瓶内部访问google云存储桶。在

编辑)不受官方支持。有关解决方法,请参阅答案。在

代码看起来像这样。。在

from flask import Flask
from google.cloud import storage

# UNCOMMENT THIS FOR SOLUTION
#import requests_toolbelt.adapters.appengine
#requests_toolbelt.adapters.appengine.monkeypatch()

app = Flask(__name__)
@app.route('/endpoint', methods=['POST', 'PUT'])
def upload_to_storage():
    try:

      # file info
      filename = secure_filename(file.filename)
      mimetype = file.content_type

      # connect to bucket
      client = storage.Client(project='projectName')
      bucket = client.get_bucket('bucketName')

      # upload file to bucket
      blob = storage.Blob(filename, bucket)
      blob.upload_from_file(file, content_type=mimetype, num_retries=10)

      return jsonify({'status':200})

    except:

      return jsonify({'status':500})

错误消息:

(“连接中止”,错误(13,“权限被拒绝”)


Tags: tofromimportclientflaskbucketgooglestorage
2条回答

而不是使用谷歌云存储模块,使用专门为在GAE标准下运行而设计的GCS客户端: https://cloud.google.com/appengine/docs/standard/python/googlecloudstorageclient/setting-up-cloud-storage#downloading_the_client_library。 此客户端将隐式执行身份验证,以避免“权限被拒绝”错误。在

下一页演示如何使用客户机编写:https://cloud.google.com/appengine/docs/standard/python/googlecloudstorageclient/read-write-to-cloud-storage#writing_to_cloud_storage。唯一缺少的信息是示例中的“filename”格式为“//”。写操作负责定位并写入正确的bucket(不需要事先检索bucket)。在

回答

(编辑)谷歌云存储在GAE标准中不受正式支持,要使身份验证生效(google-auth),需要执行一些额外的步骤:

更新要求.txt

requests-toolbelt

假设您在第三方库中使用名为“lib”的目录

$ pip install -r requirements.txt -t lib

更新appengine_配置.py from google.appengine.ext import vendor vendor.add('lib')

更新主.py(或等效物) import requests_toolbelt.adapters.appengine requests_toolbelt.adapters.appengine.monkeypatch()

更新应用程序yaml libraries: - name: ssl version: latest

相关问题 更多 >