我正在使用dev_appserver.py
测试我的应用程序。
我上传文件的函数类似于:
def upload_file(file_stream, filename):
"""Upload a file to Google Cloud Storage."""
client = google.cloud.storage.client.Client(project=_GOOGLE_CLOUD_PROJECT)
bucket = client.get_bucket(_GOOGLE_STORAGE_BUCKET) # Here it breaks!
blob = bucket.blob(filename)
blob.upload_from_string(file_stream)
url = blob.public_url
return url
在bucket = client.get_bucket(_GOOGLE_STORAGE_BUCKET)
行,我收到一条错误消息:
*** ConnectionError: ('Connection aborted.', error(13, 'Permission denied'))
我通过执行以下操作进行身份验证:
gcloud auth application-default login
我的app.yaml:
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /static
static_dir: static
application_readable: true
- url: /.*
script: main.app
libraries:
- name: ssl
version: latest
你知道怎么解决吗?
发布于 2018-03-21 10:42:53
您似乎没有设置正确的权限,无法从您用于运行应用程序的帐户访问您的云存储存储桶。
存储桶的权限是通过使用Access Control Lists (ACL)来设置的,ACL定义了哪些帐户可以访问存储桶以及访问的类型(读、写等)。他们做到了。
下面是如何为特定账号设置权限,使其可以访问存储桶的示例:
gsutil acl ch -u [USER_EMAIL]:[PERMISSION] gs://[BUCKET_NAME]
设置ACL还有其他可用选项,如使用控制台或通过代码添加权限。您可以在here中找到这些选项。
更新
在与处理这种情况的团队做了一些研究和咨询后,我可以确认到目前为止,the use of SSL with sockets is not supported on dev_appserver。由于您正在使用的客户端库正在使用HTTPS进行连接,因此如果没有此支持,使用dev_appserver将无法工作。
作为替代方案,您可以考虑使用API client library for Python。在这里你可以找到一个关于如何使用这个库从你的应用程序连接到云存储存储桶的example。
https://stackoverflow.com/questions/49334438
复制