我正在将网站从IIS迁移到GAE,我正在尝试batch upload a lot of images。除了那个特殊的挑战,我还有一个让我更关心的问题。网站的所有内容(存储在数据库中)都会引用图像:
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])
和'route'如下
('/images/(.*)', ServeBlobs)
这很好用,不需要单独的查找表。但是,我很确定hte Blob的filename属性不能包含'/'所以我该如何处理上面示例中名为some-folder或maybe-another-folder的文件夹(其中有很多文件夹)?
此外,不同文件夹中的图像名称几乎肯定会重叠,例如
"/images/foldera/main.jpg"
and
"/images/folderb/main.jpg"
有什么想法吗?
答案 0 :(得分:2)
您应该让上传表单指定文件的完整路径作为附加字段,并完全忽略上传文件名,或将其附加到提供的路径。
然后,您应该创建一个数据存储模型,其中BlobReferenceProperty
引用blob,并以完整路径作为键名。这样,您可以通过简单的数据存储区查找blob而不是更昂贵的查询,并且您还可以针对实体存储任何相关信息(例如标题信息等)。
答案 1 :(得分:1)
不是直接答案,而是更多建议:
如果在您的应用程序中完全可能,我建议您尝试迁移所有动态图像以使用blobstore的get_serving_url方法。而不是有一个处理程序来手动提供你的blob。它是一个更有效的服务图像系统,为您提供了访问内置调整大小的未来灵活性。
这将要求您的迁移变得更复杂,但从长远来看,我相信会好得多。
取决于您在以前版本的应用中存储所有图片链接的方式,这可能是微不足道或几乎不可能的,但我认为值得记住。