带有远程 API 的 Google 云存储本地客户端
我正在尝试在我的应用引擎项目中使用谷歌的远程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.....
我觉得None不应该出现在这个网址里。是不是GoogleAppEngineCloudStorageClient,版本1.9.0.0有问题?我现在使用的是Google App Engine 1.9.1。
有没有什么想法?
2 个回答
0
如果我理解没错的话,你是想把本地的文本文件上传到一个特定的存储桶里。我觉得你现在的做法可能行不通。
另外一个选择是放弃使用远程API,改用云存储API来上传文件。
2
谷歌云存储的客户端不太在乎你使用的远程API工具,它会认为你是在本地运行脚本。
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