带有远程 API 的 Google 云存储本地客户端

2 投票
2 回答
602 浏览
提问于 2025-04-17 23:53

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

撰写回答