1

我正在将一个站点从 IIS 迁移到 GAE,并尝试批量上传大量图像。除了这一特殊挑战之外,我还有一个更让我担心的挑战。网站的所有内容(存储在数据库中)都引用图像,如下所示:

http://myurl.com/images/some-folder/maybe-another-folder/image-name.jpg

我在 Python 中创建了一个简单的处理程序来提供图像:

class ServeBlobs(blobstore_handlers.BlobstoreDownloadHandler):    
  def get(self, resource):        
      query = "where filename='%s'" % resource        
      blobs = blobstore.BlobInfo.gql(query).fetch(1)        
      self.send_blob(blob_infos[0])

'路线'如下

('/images/(.*)', ServeBlobs)

这很好用,不需要单独的查找表。但是,我很确定 hte Blob 的文件名属性不能包含“/”,那么我该如何处理上面示例中称为 some-folder 或 may-another-folder 的文件夹(其中有很多)?

此外,几乎可以肯定不同文件夹中的图像名称存在重叠,例如

"/images/foldera/main.jpg"
and
"/images/folderb/main.jpg"

有任何想法吗?

4

2 回答 2

2

您应该让上传表单指定文件的完整路径作为附加字段,并完全忽略上传文件名,或将其附加到提供的路径。

然后,您应该创建一个BlobReferenceProperty引用 Blob 的 Datastore 模型,并使用完整路径作为键名。这样,您可以通过简单的数据存储获取而不是更昂贵的查询来查找 blob,并且您可以另外存储针对实体的任何相关信息(例如标头信息等)。

于 2011-04-15T03:52:07.823 回答
1

不是直接的答案,而是更多的建议:

如果在您的应用程序中完全有可能,我建议您尝试迁移所有动态图像以使用 blobstore 的get_serving_url方法。而不是让处理程序手动为您的 blob 提供服务。它是一个更有效的图像服务系统,并为您提供了访问内置调整大小的未来灵活性。

这将需要您的迁移稍微复杂一些,但我相信从长远来看会更好。

  • 您需要像当前一样将每个图像发布到 blobstore,并检索图像 blob的服务 url
  • 在迁移期间保留旧网址的本地地图=>新服务网址
  • 将所有旧网址更新为您的应用程序/数据中的新服务网址

根据您在以前版本的应用程序中存储所有图像链接的方式,这可能是微不足道的或几乎是不可能的,但我认为值得牢记。

于 2011-04-15T08:47:18.587 回答