将图像(从URL)存储到GAE数据存储区

时间:2014-05-03 21:47:57

标签: python image google-app-engine blobstore app-engine-ndb

我正在使用python构建基于Google App Engine的Web应用程序;但是我似乎遇到了障碍。

目前,我的网站从外部网站获取远程图像网址。 URL放在列表中并发送回我的应用程序。我希望能够在我的数据存储区中存储相应的图像(而不是URL);为了避免每次都必须获取远程图像以及必须处理断开的链接。

我在网上找到的解决方案都涉及用户必须上传自己的图像。我试图实现,但我不确定一旦用户点击提交按钮,上传的图像(或它如何转换为blob)会发生什么。

根据我的理解,blob是存储为单个实体(来自维基百科)的二进制数据的集合。因此,我尝试使用以下内容:

class rentalPropertyDB(ndb.Model):
    streetNAME = ndb.StringProperty(required=True)
    image = ndb.BlobProperty(default=None) 

class MainPage(BaseHandler):
    def get(self):
        self.render("index.html")
    def post(self):
        rental = rentalPropertyDB()
        for image in img_urls:
            rental.image = urlfetch.Fetch(image).content
        rental.put()

此问题的解决方案:Image which is stored as a blob in Datastore in a html page 与我的相同,但解决方案建议将图像上传到blobstore并使用:

upload_files = self.get_uploads('file')
blob_info = upload_files[0]

这让我感到困惑,因为我不确定'文件'究竟是指什么。我会用每张图片的网址替换'file'吗?或者我需要在替换之前对每个图像执行一些操作吗?

我已经坚持这个问题至少两天了,非常感谢所提供的任何帮助。我认为这让我如此困惑的主要原因是每个解决方案中使用的方法种类繁多。即使用Google Cloud Storage,URLFetch,Images API以及各种类型的ndb.Blobstore(BlobKeyProperty与BlobProperty)等。

谢谢。

1 个答案:

答案 0 :(得分:1)

小心模型中的blob。模型不能超过1 Mo,包括blobproperty。

如果我们听谷歌,没有充分的理由使用blobstore。如果可以,请使用Google云端存储。它用于存储文件。