【问题标题】:Batch upload of Blobs to Google App Engine将 Blob 批量上传到 Google App Engine
【发布时间】:2011-04-15 09:14:18
【问题描述】:

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

现在,很明显,我应该在 GAE 中为此使用 Blob 存储(否则更新应用程序会非常痛苦!)。

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

【问题讨论】:

  • 您可能需要考虑将这些静态资产放在 Amazon S3 中,因为如果您将它们上传到 blobstore,您需要一种方法将它们的友好名称(“images/logo.png”)转换为它们的blobstore 密钥,然后再为它们提供服务。这会给您的项目增加更多的复杂性和膨胀,并可能使其更难维护。
  • 实际上,在 GAE 中通过友好名称提供文件非常容易。例如,请参阅我关于该主题的其他问题:stackoverflow.com/questions/5671901/…
  • 我应该注意 - 我不知道这项工作在 BlobStore 的 CPU 方面有多昂贵(即按文件名选择)。

标签: google-app-engine scripting file-upload


【解决方案1】:

目前的bulkloader不支持这个,但是可以自己写一个。这个过程是这样的:

  1. 编写处理上传的 blob 的处理程序,描述为 here。让它将新创建的 blob 的密钥写入数据存储区,或者通过重定向将其返回到上传程序,或者任何最适合您的应用的方式。
  2. 编写上传脚本。可以使用remote_api调用blobstore的create_upload_url函数,然后使用urllib上传文件。请务必以多部分形式对文件进行编码,以便 blobstore 正确识别它。

附带说明,上传应用只会上传修改后的文件,因此您可以存储大量静态内容,并且只有在更改后才会上传。不过,这可能对您没有帮助,因为应用程序的大小限制为 300mb。

【讨论】:

  • 谢谢,我会玩这些,当我得到它的工作时标记回答。顺便说一句,作为应用程序上传不起作用的另一个原因是因为该应用程序允许在部署后动态上传。 BlobStore 是明确的选择。再次感谢。
  • 嗨尼克,感谢您的帮助,我快到了。让这一切运行起来,我正在使用 MultipartPostHandler (pipe.scs.fsu.edu/PostHandler/MultipartPostHandler.py) 帮助我使用 urllib2 上传文件。但是,我收到一个 500 错误并且没有任何信息可以帮助...想法? url = blobstore.create_upload_url('/files') opener = urllib2.build_opener(MultipartPostHandler.MultipartPostHandler) params = { "file" : open(".. path to file ..", "rb") opener.open(url,参数)... HTTPError:HTTP 错误 500:没有详细信息?没有帮助,不知道!? :(
  • @ConfusedNoob 默认情况下,App Engine 会为未捕获的异常显示标准的 500 页面,因为您的用户不需要查看堆栈跟踪(这可能存在安全风险)。检查您应用的管理控制台,在日志部分下,查看堆栈跟踪。
  • 你的传奇。我实际上正在使用开发服务器 - 我没有想到查看开发服务器日志文件(木偶)。很快就找到了问题的根源。感谢您的帮助!
【解决方案2】:

比这更容易。有一个免费软件应用程序可让您将文件拖放到云存储中。查看CloudBerry

【讨论】:

  • 这无关紧要,因为它不会上传到 App Engine blobstore。
  • 耻辱,本来是完美的:/
猜你喜欢
  • 2010-10-20
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-10
  • 1970-01-01
  • 2013-07-13
  • 2011-08-15
相关资源
最近更新 更多