Поскольку Google App Engine доступен только для чтения, вы не можете записывать в него файлы с помощью встроенных функций tinify. Однако вы можете использовать хранилище BLOB-объектов в App Engine. Убедитесь, что у вас есть код tinify и модуль запросов (который использует tinify) в папке libs в вашем приложении GAE. Для работы tinify мне нужна была версия 2.3 запросов.
Чтобы использовать хранилище изображений с GAE, определите модель базы данных для объекта с хранилищем BLOB-объектов, например:
from google.appengine.ext import ndb
class Image(ndb.Model):
img = ndb.BlobProperty()
Теперь нам нужна функция в tinify, которая записывает в хранилище BLOB-объектов объекта вместо записи в файл. Вы можете отразить существующий код tinify для записи в файл:
В файле source.py
добавьте этот метод:
from google.appengine.ext import ndb
class Source(object):
...
def to_blob(self, key):
return self.result().to_blob(key)
...
И в result.py
файле добавьте этот метод:
from google.appengine.ext import ndb
class Result(ResultMeta):
...
def to_blob(self, key):
img_store = key.get()
img_store.img = self.data
...
Теперь tinify может писать в GAE, что вы можете обслуживать как хотите. Вам просто нужно создать сущность, передать ключ методу Source.to_blob (), и теперь в вашей сущности будет сохранено сжатое изображение. Итак, теперь вы можете:
class Basepage(webapp2.RequestHandler):
def post(self):
...
img_store = Image()
img_key = img_store.put()
# Use URL for image to be compressed
source = tinify.from_url("http://...")
source.to_blob(img_key)
compressed_img_store = img_key.get()
self.response.headers['Content-Type'] = 'image/png'
self.response.out.write(compressed_img_store.img)
person
baronsbaby
schedule
11.04.2016