尝试使用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,“权限被拒绝”)
而不是使用谷歌云存储模块,使用专门为在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
假设您在第三方库中使用名为“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
相关问题 更多 >
编程相关推荐