Какой самый простой код для передачи небольшого изображения (jpg) из облачного хранилища на веб-страницу (приложение Google «Hello World»)? - PullRequest
0 голосов
/ 26 августа 2018

JPG загружен в корзину https://storage.googleapis.com/.... Должен ли я использовать BLOB-объекты или get_serving_url API?

... Я пробовал несколько разных способов, но получаю сообщение об ошибке.Вот пример Hello World:

import webapp2


class MainPage(webapp2.RequestHandler):
    def get(self):
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.write('Hello, World, Hello!')

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

1 Ответ

0 голосов
/ 28 августа 2018

Если вы хотите использовать стандарт App Engine, сначала вам нужно выполнить несколько шагов:

  1. Активировать корзину облачного хранилища
  2. Загрузить клиентскую библиотеку cloudstorage
  3. Установить клиентскую библиотеку как стороннюю зависимость

Затем вы можете воспользоваться проектом быстрого запуска для стандартной среды App Engine и изменить файл main.py так, чтобы он выглядел следующим образом:

import webapp2
import cloudstorage as gcs


class MainPage(webapp2.RequestHandler):
    def get(self):
        gcs_file = gcs.open('/your-bucket-name/your-image.jpg')
        contents = gcs_file.read()
        gcs_file.close()
        self.response.write(contents)
        self.response.headers['Content-Type'] = 'image/jpeg'


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

Когда вы закончите, у вас должна быть структура каталогов со следующей структурой:

.
├── app.yaml
├── appengine_config.py
├── lib
│   └── cloudstorage
│       ├── __init__.py
│       ├── api_utils.py
│       ├── cloudstorage_api.py
│       ├── common.py
│       ├── errors.py
│       ├── rest_api.py
│       ├── storage_api.py
│       └── test_utils.py
└── main.py

И вы можете развернуть его с помощью:

$ gcloud app deploy

Тем не менее, вам также не нужен полноценный экземпляр App Engine для обслуживания одного изображения - вы также можете просто сделать это с помощью облачной функции Google, например:

В requirements.txt:

google-cloud-storage

В main.py:

from google.cloud import storage
from flask import make_response

client = storage.Client()
bucket = client.get_bucket('your-bucket-name')
blob = bucket.get_blob('your-image.jpg').download_as_string()

def serve_image(request):
    return make_response((blob, {'Content-Type': 'image/jpeg'}))

И разверните его с помощью:

$ gcloud beta functions deploy serve_image --runtime python37 --trigger-http
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...