【发布时间】:2018-01-15 09:23:13
【问题描述】:
尝试使用 client library for Python 从谷歌应用引擎标准运行烧瓶内部访问谷歌云存储桶。
(edit) 不受官方支持。查看解决方法的答案。
代码看起来像这样..
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})
错误信息:
('Connection aborted.', error(13, 'Permission denied'))
【问题讨论】:
-
App 引擎应用程序作为特定服务帐户运行。您的应用引擎应用的服务帐户是否有权使用存储桶“my-bucket”执行操作?
-
是的,服务帐号有权限。我认为发生的事情是我需要确保 Requests 使用 URLFetch cloud.google.com/appengine/docs/standard/python/issue-requests
标签: python google-app-engine flask google-cloud-storage