如何将图像与Google App Engine中的实体相关联

时间:2009-04-14 18:12:46

标签: database image google-app-engine cloud

我正在开发一个Google App Engine应用程序,并且已经达到了我想要将文件系统上的图像与数据库中的实体相关联的程度。

我正在使用bulkupload_client.py脚本将实体上传到数据库,但我一直试图弄清楚如何将文件系统文件与实体相关联。如果一个实体有以下图像:主要,细节,正面,背面我我可能想要这样的命名方案:<entity_key&gt; _main.jpg

我想我可以为每个实体创建一个GUID并使用它,但我宁愿不必这样做。

有什么想法吗?

我认为我无法使用实体密钥,因为本地数据存储区和生产数据存储区之间可能有所不同,因此我必须在生产批量上传后重命名所有图像。

3 个答案:

答案 0 :(得分:1)

有一个关于如何Serve Dynamic Images with Google App Engine的GAE教程。包括解释和可下载的源代码。

答案 1 :(得分:0)

根据我对GAE的非常有限的了解,我在这里看到两个选项。

首先,您无法在GAE中实际向文件系统写入任何内容,对吧?这意味着您要包含的任何图像都必须作为Web应用程序的一部分上载,因此具有已知且不可更改的静态名称和目录结构。在这种情况下,您对_main.jpg,OR /entity_key/main.jpg的想法可以正常工作。

第二个选项是将图像存储为数据库中的blob。这可以允许动态上载图像,而不是每次需要更新图像时都必须上传新版本的webapp。它会迅速进入你的免费数据库空间。以下是有关从数据库提供图片的一些信息。 http://code.google.com/appengine/articles/images.html

答案 2 :(得分:0)

如果您要静态上传图像,可以根据需要使用基于密钥的方案:只需为实体指定一个密钥名称,然后使用该名称查找相关图像。您可以将键名称(在Python版本中)指定为实体类的key_name构造函数参数:

myentity = EntityClass(key_name="bleh", foo="bar", bar=123)
myentity.put()

你可以获得像这样的实体的密钥名称:

myentity.key().name()

听起来有问题的数据存储区实体基本上都是静态内容,所以也许你最好简单地将它们编码为源文件中的文字,从而将它们放在内存中,或者在运行时从本地数据文件中加载它们,绕过它们需要为它们查询数据存储区吗?