GAE Python获取默认存储桶fxn返回None

时间:2016-02-17 10:22:34

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

我是一名GCS新手试图编写一个应用程序,将文件上传到我创建的存储桶中。我已经按照教程使用浏览器界面创建了一个存储桶。但是,当我以编程方式尝试访问我的存储桶时,出现错误。我的应用程序输出"无"而不是打印我的默认存储桶名称。我的整体应用代码如下所示:

import webapp2
from google.appengine.api import app_identity

class MainHandler(webapp2.RequestHandler):
    def get(self):
        self.response.write(app_identity.get_default_gcs_bucket_name())

app = webapp2.WSGIApplication([
    ('/', MainHandler)
], debug=True)

我做错了什么?

1 个答案:

答案 0 :(得分:4)

<强>更新

现在,您可以通过在云端控制台中访问应用引擎的应用设置https://console.cloud.google.com/appengine/settings?project= 来创建新控制台中的默认存储区

Create Default Bucket

<强>原始

您获得NONE,因为默认情况下不再是默认存储桶

  

关于默认云存储分区

     

使用旧App Engine控制台创建的应用程序可以使用   默认云存储桶,具有免费配额且不需要   要为应用启用结算功能。这些应用程序继续工作   和以前一样在Google Cloud Platform Console中。

     

但是,在Google云端平台中创建了新的App Engine项目   控制台没有默认的云存储桶。相反,你必须   使用如上所述的标准云存储桶。

但是,由于您手动创建了存储桶,因此您已经拥有其名称,因此可以跳过app_identity.get_default_gcs_bucket_name()并对存​​储桶名称进行硬编码或从配置变量等中调用它。

然后,您可以使用gcloud-python lib将文件上传到您的存储桶:

from gcloud import storage

client = storage.Client()
bucket = client.get_bucket('<bucket-name>')
my_file = bucket.blob('/path/to/be/saved/in/bucket')
my_file.upload_from_filename(filename='/path/to/local/file')

如果您在应用引擎上执行此操作,则必须vendor gcloud lib。

如果您仍然希望获得格式为<project-id.appspot.com>的默认存储桶的旧行为,那么所有这些都说完了,您可以关注GAEfan's answer,简而言之:

  

转到旧控制台,appengine.google.com&gt;应用程序设置&gt;云集成&gt;创建