Если вы обслуживаете его локально, используя dev_appserver.py
, он запускает локальную эмуляцию облачного хранилища и не подключается к реальному облачному хранилищу Google.
Попробуйте написать файл, а затем прочитать его.Вы увидите, что это удастся.
Вот пример:
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)
Кроме того, стоит упомянуть, что документация для Использование клиентской библиотеки с сервером приложений разработки выглядит устаревшей, в ней говорится:
Локальная эмуляция облачного хранилища отсутствует, все запросы на чтение и запись файлов должны отправляться через Интернет в реальное хранилище облачного хранилища.
Команда, ответственная задокументация уже была проинформирована об этой проблеме.