我正在使用 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
知道怎么解决吗?
最佳答案
您似乎没有设置适当的权限,无法从您用于运行应用程序的帐户访问您的 Cloud Storage 存储桶。
存储桶的权限是通过使用 Access Control Lists 设置的(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了解如何使用此库从您的应用连接到 Cloud Storage 存储桶。
关于python - *** ConnectionError : ('Connection aborted.' , error(13, 'Permission denied' )) 试图将文件上传到谷歌云存储时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49334438/