我正在尝试在我的应用引擎项目中使用google remote api将本地文件上传到我应用的默认云存储桶。
我已将app.yaml配置为启用远程api。我可以访问我的存储桶并从中上传/访问文件。我运行我的本地python控制台并尝试使用以下代码写入存储桶:
from google.appengine.ext.remote_api import remote_api_stub
from google.appengine.api import app_identity
import cloudstorage
def auth_func():
return ('user@gmail.com', '*******')
remote_api_stub.ConfigureRemoteApi('my-app-id', '/_ah/remote_api', auth_func,'my-app-id.appspot.com')
filename = "/"+app_identity.get_default_gcs_bucket_name()+ "/myfile.txt"
gcs_file = cloudstorage.open(filename,'w',content_type='text/plain',options={'x-goog-meta-foo': 'foo','x-goog-meta-bar': 'bar'})
我看到以下反应:
WARNING:root:suspended generator urlfetch(context.py:1214) raised DownloadError(Unable to fetch URL: http://None/_ah/gcs/my-app-id.appspot.com/myfile.txt)
注意
http://None/_ah/gcs.....
我不认为无应该是网址的一部分。 GoogleAppEngineCloudStorageClient v1.9.0.0存在问题吗?我也在使用Google App Engine 1.9.1。
有什么想法吗?
答案 0 :(得分:1)
Google云端存储客户端不尊重remote_api_stub,并认为您在本地运行脚本
os.environ['SERVER_SOFTWARE'] = 'Development (remote_api)/1.0'
甚至
os.environ['SERVER_SOFTWARE'] = ''
会有所帮助。
该功能,从common.py
def local_run():
"""Whether we should hit GCS dev appserver stub."""
server_software = os.environ.get('SERVER_SOFTWARE')
if server_software is None:
return True
if 'remote_api' in server_software:
return False
if server_software.startswith(('Development', 'testutil')):
return True
return False
答案 1 :(得分:0)
如果我理解正确,您希望将本地文本文件上传到特定存储桶。我认为你所做的事情不会起作用。
另一种方法是放弃RemoteAPI并使用Cloud Storage API上传它。