Если вы хотите использовать стандарт App Engine, сначала вам нужно выполнить несколько шагов:
- Активировать корзину облачного хранилища
- Загрузить клиентскую библиотеку
cloudstorage
- Установить клиентскую библиотеку как стороннюю зависимость
Затем вы можете воспользоваться проектом быстрого запуска для стандартной среды 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