以下代码几乎是Google的示例代码的逐字记录副本,用于通过Python 2.7 App Engine标准环境从Google Cloud Storage提供文件。使用命令本地服务时:
dev_appserver.py --default_gcs_bucket_name darianhickman-201423.appspot.com
Triggers
我在控制台上看到的空白消息是:
import cloudstorage as gcs
import webapp2
class LogoPage(webapp2.RequestHandler):
def get(self):
bucket_name = "darianhickman-201423.appspot.com"
self.response.headers['Content-Type'] = 'image/jpeg'
self.response.headers['Message'] = "LogoPage"
gcs_file = gcs.open("/"+ bucket_name +'/logo.jpg')
contents = gcs_file.read()
gcs_file.close()
self.response.body.(contents)
app = webapp2.WSGIApplication([ ('/logo.jpg', LogoPage),
('/logo2.jpg', LogoPage)],
debug=True)
同样,这与在上记录的读取逻辑几乎相同 https://cloud.google.com/appengine/docs/standard/python/googlecloudstorageclient/read-write-to-cloud-storage
答案 0 :(得分:0)
如果您使用dev_appserver.py
在本地提供服务,它将运行Cloud Storage的本地模拟,并且不会连接到实际的Google Cloud Storage。
尝试写入文件,然后阅读。您会看到它会成功。
以下是示例:
import os
import cloudstorage as gcs
from google.appengine.api import app_identity
import webapp2
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'
filename = "/" + bucket_name + "/testfile"
#Create file
gcs_file = gcs.open(filename,
'w',
content_type='text/plain')
gcs_file.write('Hello world\n')
gcs_file.close()
#Read file and display content
gcs_file = gcs.open(filename)
contents = gcs_file.read()
gcs_file.close()
self.response.write(contents)
app = webapp2.WSGIApplication(
[('/', MainPage)], debug=True)
使用dev_appserver.py --default_gcs_bucket_name a-local-bucket .
如果您在Google App Engine上部署应用程序,则该应用程序将正常工作(假设您已上传名为 logo.jpg 的文件),因为它已连接到Google Cloud Storage。我对其进行了微小的更改进行了测试:
import os
import cloudstorage as gcs
from google.appengine.api import app_identity
import webapp2
class LogoPage(webapp2.RequestHandler):
def get(self):
bucket_name = os.environ.get('BUCKET_NAME',app_identity.get_default_gcs_bucket_name())
#or you can use bucket_name = "<your-bucket-name>"
self.response.headers['Content-Type'] = 'image/jpeg'
self.response.headers['Message'] = "LogoPage"
gcs_file = gcs.open("/"+ bucket_name +'/logo.jpg')
contents = gcs_file.read()
gcs_file.close()
self.response.write(contents)
app = webapp2.WSGIApplication(
[('/', LogoPage)], debug=True)
此外,值得一提的是Using the client library with the development app server的文档似乎已过时,它指出:
没有Cloud Storage的本地仿真,所有读取和读取请求 写入文件必须通过Internet发送到实际的Cloud Storage 桶。
负责文档的团队已被告知此问题。