Python google应用程序引擎标准中的google云存储权限被拒绝
正在尝试使用从google app engine标准运行烧瓶内部访问google云存储桶 (编辑)不受官方支持。请参阅解决方法的答案 代码看起来像这样Python google应用程序引擎标准中的google云存储权限被拒绝,python,google-app-engine,flask,google-cloud-storage,Python,Google App Engine,Flask,Google Cloud Storage,正在尝试使用从google app engine标准运行烧瓶内部访问google云存储桶 (编辑)不受官方支持。请参阅解决方法的答案 代码看起来像这样 from flask import Flask from google.cloud import storage # UNCOMMENT THIS FOR SOLUTION #import requests_toolbelt.adapters.appengine #requests_toolbelt.adapters.appengine.mon
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标准不正式支持google.cloud.storage,要使身份验证生效(),需要执行一些额外的步骤: 更新需求.txt 请求工具带 假设您正在使用一个名为“lib”的目录访问第三方库中的供应商
$pip安装-r requirements.txt-t lib
更新appengine\u config.py
来自google.appengine.ext导入供应商
vendor.add('lib')
更新main.py(或同等版本)
导入请求\u toolbelt.adapters.appengine
请求\u toolbelt.adapters.appengine.monkeypatch()
更新app.yaml
图书馆:
-名称:ssl
版本:最新
不要使用google.cloud.storage模块,而是使用专门为在GAE标准内运行而设计的GCS客户端:
.
此客户端将隐式执行身份验证,以避免出现“权限被拒绝”错误
下面的页面演示如何使用客户机编写:h。唯一缺少的信息是示例中的“文件名”格式为“/”。写入操作负责定位并写入正确的存储桶(您无需事先检索存储桶)。应用程序引擎应用程序作为特定服务帐户运行。你的应用程序引擎应用程序的服务帐户是否有权限使用“我的桶”进行操作?是的,服务帐户有权限。我认为发生的事情是,我需要确保请求使用URLFetch,这不是问题信息,而是答案(编辑答案,以明确我不只是添加额外的问题信息)。这个答案是正确的,可以完成完整的monkeypatching,使谷歌云存储工作。当您需要从devserver访问联机bucket时,需要使用它。有时您需要从开发服务器访问联机bucket(只读操作是安全的)。使用标准的dev服务器无法执行此操作。上面的答案是一个很好的解决方法。