未找到App Engine标准Python云存储文件

时间:2018-03-08 03:05:58

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

不确定这是否与NotFoundError: Expect status [200] from Google Storage. But got status 404 while reading a file完全相同,但我遇到了同样的问题,我找不到解决方法。我使用浏览器将文件player2018上传到我的存储桶。它就在那里,我可以在存储云浏览器中看到它。我肯定会使用正确的存储桶名称进行解析,这只是我的应用程序的名称,它与我从云端浏览器获取文件链接时显示的名称相同。所以这是相关的代码:

def bucket_name():
    os.environ.get('BUCKET_NAME', app_identity.get_default_gcs_bucket_name())
    return app_identity.get_default_gcs_bucket_name()

def read_file(filename):
    fn = "/" + bucket_name() + "/" + filename
    logging.debug("Reading" + fn)
    with cloudstorage.open(fn) as cloudstorage_file:
        return cloudstorage_file.readlines()

我回来了:

NotFoundError: Expect status [200] from Google Storage. But got status 404.
Path: '/[Actual Bucket Name]/players2018'.
Request headers: None.
Response headers: {'connection': 'close', 'date': 'Thu, 08 Mar 2018 02:25:32 GMT', 'server': 'Development/2.0'}.
Body: ''.
Extra info: None.

我更改了桶名以保护无能为力,即我。

2 个答案:

答案 0 :(得分:1)

我认为问题与权限有关。开发服务器上的应用程序具有与部署的应用程序不同的名称。已部署的应用程序的名称类似于s~myappname。开发服务器上的应用程序将使用dev~myappname或有时dev~None等名称。

当您的开发服务器进入云存储以获取文件时,云存储无法将开发服务器识别为该存储区的所有者,并拒绝提供该文件。

要对此进行测试,您可以将Google云端存储上的文件公开提供。如果开发服务器之后工作,那就是问题。

除了公开文件外,我还不确定如何与dev服务器共享文件。谷歌在项目之间分享的东西令人困惑,但你可能能够完成它。

答案 1 :(得分:0)

您在评论中提到的

This文档目前似乎至少部分过时了。而是尝试使用以下example。如果您按照第一个过时链接中的说明操作,则存储在存储桶中的文件不会通过互联网发送;对此进行了模拟。

我假设您使用的是以下存储库:

$ git clone https://github.com/GoogleCloudPlatform/appengine-gcs-client.git

请注意,此演示无需使用存储桶名称,因为此存储库中引用的云存储库实际上使用 blobstore 。 Blobstore使用本地数据存储模拟器模拟云存储访问。

我将目录python/cloudstorage 中的内容(请注意路径中缺少src复制到目录demo中。

你可以check it for yourself。应该像这样列出所有文件:

注意:我在demo/main.py中注释掉了这一行;你可能也想这样做:

#self.delete_files()