Google云端存储客户端,在本地客户端上具有远程api

时间:2014-03-25 21:27:13

标签: python google-app-engine google-cloud-storage

我正在尝试在我的应用引擎项目中使用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。

有什么想法吗?

2 个答案:

答案 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上传它。