Google App Engine,云端存储无法读取python中的上传文件

时间:2017-09-24 11:09:46

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

我创建了存储桶,通过

上传文件
 gsutil cp -a public-read test.htm gs://BUCKETNAME

我可以在存储浏览器中看到该文件,并使用gsutil ls

当我尝试使用以下代码阅读时,我得到了

  

NotFoundError:期待来自Google存储的状态[200]。但得到了地位   404。

代码:

import logging
import os
import lib.cloudstorage as gcs
import webapp2

from google.appengine.api import app_identity


my_default_retry_params = gcs.RetryParams(initial_delay=0.2,
                                          max_delay=5.0,
                                          backoff_factor=2,
                                          max_retry_period=50)
gcs.set_default_retry_params(my_default_retry_params)

class MainPage(webapp2.RequestHandler):

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

        self.response.headers['Content-Type'] = 'text/plain'
        self.response.write('Demo GCS Application running from Version: '
           + os.environ['CURRENT_VERSION_ID'] + '\n')
        self.response.write('Using bucket name: ' + bucket_name + '\n\n')

        bucket = '/' + bucket_name
        filename = bucket + '/test.htm'
        self.read_file(filename)


    def read_file(self, filename):
        self.response.write('Abbreviated file content (first line and last 1K):\n')

        gcs_file = gcs.open(filename)
        self.response.write(gcs_file)

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

当我在我的环境中使用此处的示例代码(https://github.com/GoogleCloudPlatform/appengine-gcs-client/blob/master/python/demo/main.py)时,会发生Strage事情。

代码在同一个存储桶上创建并写入文件,然后读取并删除它。工作正常,但当我注释掉删除部分时,我无法在存储浏览器或gsutil中看到这些文件,但我仍然可以使用代码读取它们。

我在存储浏览器中检查了我的存储桶权限,看起来很好,该应用的服务帐户是存储桶拥有者。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

在重新审视之后,由于最近的需求,我想出来了。 gsutil有一个bug,我在github读到了它的某个地方。当我通过存储浏览器或python客户端库上传文件时,它可以工作。