0

我是 GAE (Python) 的新手,我真的需要一些帮助来了解如何从数据存储中提供图像并在客户端 Javascript 中访问它们。

我一直在关注 Google 的教程:使用 Google App Engine (Python) 提供动态图像

假设我有数据对象来存储一些图像

class Default_tile(db.Model)
  name = db.StringProperty()
  image = db.BlobProperty(default=None)

将图像添加到上述数据库的正确代码是这样的吗?:

default_tile = Default_tile()
default_tile.name = "grass"
default_tile.image = db.Blob(urlfetch.Fetch("http://www.bbc.com/grass.png").content)
default_tile.put() 

不可以说我在客户端javascript上有以下代码:

  var image = new Image();

  image.onload = function() {
    context.drawImage(image, 69, 50);
  };
  imageObj.src = ***how to I get the image, named grass, from the Datastore***

所以我的问题是我将如何获得图像?

理想情况下,我只想使用 imageObj.src = /images/grass

谢谢你的帮助。

4

1 回答 1

1

数据存储

您正确地遵循了示例,但是您错过了从同一 URL检索和显示图像的部分。

基本上,您需要一个处理程序来定位此图像,然后提供它。在您的情况下,假设title示例中的 是name您的情况。所以你最终会得到一个用于检索图像的 URL,如下所示:

http://localhost:8080/image?name=grass

这将提供图像,因此如果您想在客户端中使用,您可以简单地将其用作

imageObj.src = '/image?name=grass'

Blobstore API

如果您计划存储许多图像并从用户那里获取它们,那么您应该考虑改用Blobstore API。这对初学者来说有点复杂,但以后会有所收获,因为您可以将图像(或其他任何东西)存储在更便宜的谷歌云存储上。

从该示例中,您将能够存储和提供 blob,但您也可以blob_info.key()使用BlobKeyProperty, 而不是BlobProperty.

有了它而不是纯数据存储,您将能够利用get_serving_url()函数:

返回提供图像的 URL。

这种 URL 格式允许动态调整大小和裁剪,因此您不需要在服务器上存储不同的图像大小。图像通过高度优化的无 cookie 基础架构以低延迟提供。

于 2013-02-01T15:49:57.043 回答