2011-04-14 156 views
0

我目前正在将网站迁移到Google App Engine。以前,所有的图像和静态资源(这些东西的100几MB)只是部署的一部分。将Blob批量上传到Google App Engine

现在,很明显,我应该在GAE中使用Blob存储(否则更新应用程序将是巨大的痛苦!)。

我需要将这些图像从我的磁盘上批量上传到GAE,并怀疑我需要某种脚本来执行此操作。任何想法或建议的最佳方法?

+0

你可能要考虑把这些静态的资产在亚马逊S3,因为如果你把它们上传到Blob存储,您需要一种方式来为他们提供服务之前,将它们的友好名称(“图像/ logo.png”),以他们的Blobstore键。这会给你的项目增加更多的复杂性和膨胀,并且可能使其难以维护。 – Calvin 2011-04-14 23:55:42

+0

其实,它很容易在GAE中以友好名称提供文件。看到我关于这个主题的另一个问题的例子:http://stackoverflow.com/questions/5671901/referencing-blobs-in-gae-the-smart-way – ConfusedNoob 2011-04-15 02:52:35

+0

我应该注意 - 我不知道有多昂贵在BlobStore上的CPU的这个工作是(通过文件名选择,就是这样)。 – ConfusedNoob 2011-04-15 02:57:05

回答

1

当前的bulkloader不支持此功能,但可以自己编写一个。该过程如下所示:

  1. 编写处理上传的斑点的处理程序,如here所述。让它将新创建的blob的关键字写入数据存储区,或者通过重定向将其返回给上传器,或者最适合您应用程序的任何内容。
  2. 编写上传脚本。您可以使用remote_api调用blobstore create_upload_url函数,然后使用urllib上载文件。请确保以多部分形式对文件进行编码,blobstore才能正确识别它。

请注意,上传应用程序只上传修改过的文件,因此您可以存储大量静态内容,并且只有在它们发生更改时才会上传。但是,这可能不会对您有所帮助,因为应用程序的大小限制为300MB。

+0

谢谢,我会和他们一起玩,并且在我得到它的时候给予回答。顺便说一句,上传作为应用程序的另一个原因是行不通的,因为应用程序允许部署后动态上传。 BlobStore是明确的选择。再次感谢。 – ConfusedNoob 2011-04-15 02:56:30

+0

嗨,尼克,我几乎在那里感谢您的帮助。让这一切都运行,并使用MultipartPostHandler(http://pipe.scs.fsu.edu/PostHandler/MultipartPostHandler.py)帮助我使用urllib2上传文件。但是,我得到了500错误,没有任何信息可以帮助...思考? URL = blobstore.create_upload_url( '/文件') 开罐器= urllib2.build_opener(MultipartPostHandler.MultipartPostHandler) PARAMS = { “文件”:打开( “..文件路径..”, “RB”) 开罐器.open(url,params) ... HTTPError:HTTP错误500: 没有详细信息?没有帮助,不知道!? :( – ConfusedNoob 2011-04-18 02:44:06

+0

@ConfusedNoob默认情况下,应用程序引擎是一个标准500页捕获的异常,因为用户不需要看到的堆栈跟踪(它可以是一个安全隐患)。检查你的应用程序的管理控制台,在日志部分,看到堆栈跟踪。 – 2011-04-18 02:47:07

-1

比这更容易。有一个免费的应用程序,可以让你拖放文件到你的云存储。退房CloudBerry

+0

这是无关紧要的,因为它没有上传到App Engine blobstore。 – 2011-04-15 01:10:18

+0

惭愧,本来是完美的:/ – ConfusedNoob 2011-04-15 02:55:04