【问题标题】:Generate URL to store image in Datastore Blob生成 URL 以将图像存储在 Datastore Blob 中
【发布时间】:2013-03-27 20:20:33
【问题描述】:

我是 Python 和 Google App Engine 的新手。 我需要将图像存储在 GAE 数据存储中(不是 blobstore - 有很多示例要存储在 blobstore 中,我已经让它在 blobstore 中工作)。

文档如下:

movie = Movie()
...
movie.picture = db.Blob(urlfetch.Fetch(picture_url).content)
movie.put()

我的问题是如何获得picture_url?我不能使用 create_upload_url 方法,因为这是针对 Blobstore 的。

提前致谢

【问题讨论】:

  • 为什么首先需要数据存储中的图像?你打算以后为他们服务吗?
  • 是的。我需要稍后为他们服务。是的,我知道我可以使用 Blobstore。但文件相当小 - 我想测试 blobstore 与在数据存储中存储 blob 的性能和其他行为特征
  • 请注意,从数据存储中提供文件会产生额外的使用量。实例小时数 + 数据存储读取,您将无法使用图像 API。可以通过调用 Image API 的 get_serving_url 方法来提供图像。也就是说,您可以将文件上传到 blobstore,然后读取它(请参阅 BlobReader),将其存储在数据存储中,然后删除 blob。

标签: google-app-engine python-2.7 google-cloud-datastore


【解决方案1】:

这个问题的措辞没有人能回答,因为您需要告诉人们您打算如何开始获取图像数据。

您使用的代码是从某个 URL 下载图像并将其保存到您的 blobstore。您应该能够使用来自 flickr 或 facebook 或任何其他网站的任何可公开访问的图像 url 作为 url。您需要决定要使用的网址。

如果您希望用户上传数据,那么您需要用户使用 multipart/form-data 中的图片发出 POST 请求。您将访问请求处理程序的 request.POST 对象中的数据。在这种情况下,您不会从 url 获取它。

如果您使用的是 Blobstore,GAE 会自动解析 POST 请求数据,将其保存在 Blobstore 中,并为您提供一个 url。如果您不使用 Blobstore,那么您的请求对象中的图像数据将只存在于内存中。

【讨论】:

  • 是的。我可以看到它是多么令人困惑。是的,我想获取用户加载的图像。知道了。我会按照你的建议去做。我被绊倒了,因为当我在谷歌文档中看到上面的代码块时,我认为对于上传的图像,有一种方法可以像使用 blobstore 一样获取 url。谢谢
【解决方案2】:
db.Blob(urlfetch.Fetch(picture_url).content)

用于从其他网站获取图像。

如果你想存储用户上传的东西,你最好使用

data = self.request.get('data')  # where 'data' is the data field from your HTML form
if data :
    db.Blob(data)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-26
    • 2018-07-11
    • 2010-12-26
    • 2019-11-21
    • 1970-01-01
    • 2019-04-03
    • 2019-06-14
    • 1970-01-01
    相关资源
    最近更新 更多