Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine TInyPNG与Google应用程序引擎数据存储的集成_Google App Engine_Google Cloud Datastore_Image Compression - Fatal编程技术网

Google app engine TInyPNG与Google应用程序引擎数据存储的集成

Google app engine TInyPNG与Google应用程序引擎数据存储的集成,google-app-engine,google-cloud-datastore,image-compression,Google App Engine,Google Cloud Datastore,Image Compression,我需要从不同的URL获取图像,并在压缩后将其存储在Google数据存储中。我知道tinyPNG是一个很好的压缩API,但该API只支持AmazonS3 有人可以指导如何在Google App Engine中实现这一点。您提到的仅支持S3的功能仅适用于直接从服务器上传压缩图像,即不通过发出图像压缩请求的应用程序传递图像,这只是一个方便的功能。发件人: 上传到AmazonS3 您可以告诉Tinfy API将压缩图像直接上载到 亚马逊S3。如果您使用S3托管您的图像,这将节省您的麻烦 将图像下载到服务

我需要从不同的URL获取图像,并在压缩后将其存储在Google数据存储中。我知道tinyPNG是一个很好的压缩API,但该API只支持AmazonS3


有人可以指导如何在Google App Engine中实现这一点。

您提到的仅支持S3的功能仅适用于直接从服务器上传压缩图像,即不通过发出图像压缩请求的应用程序传递图像,这只是一个方便的功能。发件人:

上传到AmazonS3

您可以告诉Tinfy API将压缩图像直接上载到 亚马逊S3。如果您使用S3托管您的图像,这将节省您的麻烦 将图像下载到服务器并上载到S3 你自己


您的应用程序应该能够使用REST API下载压缩图像并将其保存到数据存储。

由于谷歌应用程序引擎是只读的,您无法使用内置的tinify函数向其写入文件。不过,您可以在应用程序引擎中使用blob存储。确保您在GAE应用程序的libs文件夹中有Tinfy使用的Tinfy代码和请求模块。我需要2.3版的请求才能让tinify工作

要在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)
    ...
from google.appengine.ext import ndb

class Result(ResultMeta):
    ...
    def to_blob(self, key):
        img_store = key.get()
        img_store.img = self.data
    ...
在result.py文件中添加以下方法:

from google.appengine.ext import ndb

class Source(object):
    ...
    def to_blob(self, key):
        return self.result().to_blob(key)
    ...
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)