Google App Engine 和 Amazon S3 文件上传

Posted

技术标签:

【中文标题】Google App Engine 和 Amazon S3 文件上传【英文标题】:Google App Engine and Amazon S3 File Uploads 【发布时间】:2010-11-01 15:42:52 【问题描述】:

我知道以前有人问过这个问题,但实际上并没有明确的答案。我的问题是我为 GAE 构建了一个文件上传脚本,然后才发现,你只能将文件存储到 aprox。 1MB 在数据存储中。如果您能告诉我,如果我启用计费,1MB 限制已成为历史,我可以在这里阻止您,但我对此表示怀疑。

我需要每个文件最多可以上传 20mb,所以我想也许我可以使用亚马逊的 S3。关于如何实现这一点的任何想法?

有人告诉我使用 GAE + Ec2 和 S3 的组合,但我不知道这会如何工作。

谢谢, 最大

【问题讨论】:

【参考方案1】:

来自Amazon S3 documentation:

    用户打开网络浏览器并访问您的网页。

    您的网页包含一个 HTTP 表单,其中包含用户将内容上传到 Amazon S3 所需的所有信息。

    用户将内容直接上传到 Amazon S3。

GAE 准备并提供网页,这是一项快速操作。您的用户上传到 S3,这是一个漫长的操作,但这是您用户的浏览器和亚马逊之间的操作; GAE 不参与。

S3 协议的一部分是 success_action_redirect,它可以让您告诉 S3 在成功上传时将浏览器指向何处。该重定向可以指向 GAE。

【讨论】:

好的听起来很棒,我一定会这样做。如果您想在 GAE 数据存储中存储有关文件的信息,您将如何进行?例如存储它的用户和 MIME 类型? 在用户请求“重定向”页面时存储该信息。如有必要,您可以对新上传的文件执行 HEAD 请求以获取元数据。 安全问题呢?我的意思是在将表单提交到 S3 之前无法验证表单中的数据(AJAX 除外),对吧?所以基本上如果我设置最大值。像亚马逊这样的表单中的文件大小建议您可以编写自己的表单并上传到我的存储桶?而且我在表单中添加的元数据也可以很容易地修改...... 没关系。我找到了加密的策略文件;)!非常感谢你们的帮助!我是 Stack Overflow 的新手,但这太棒了!【参考方案2】:

Google App Engine 和 EC2 是竞争对手。他们做同样的事情,虽然 GAE 为您的应用程序提供了一个在严格的语言限制下运行的环境,而 EC2 为您提供了一个虚拟机(想想 VMWare)来托管您的应用程序。

另一方面,S3 是一个原始存储 API。您可以使用 SOAP 或 REST API 来访问它。如果你想坚持使用 GAE,你可以简单地使用 Amazon S3 Python Library 从 Python 到 S3 进行 REST 调用。

当然,您必须为使用 S3 付费。令人惊讶的是,他们的计费是多么精细。刚开始的时候,我一个月确实被收取了 4 美分。

【讨论】:

好的,到目前为止一切顺利。但是,如果我有一个 20MB 的文件,并且我使用 Amazon S3 Python 库将该文件发送到 S3...GAE 不会终止该进程,因为它需要超过 30 秒吗? 说实话,我真的不知道 GAE 的局限性,我只是简单地看了一下,它的缺陷是显而易见的,并且限制了我的特定用途。老实说,除了他们提供免费版本之外,我几乎没有推荐它。 我很确定他已经知道这一切 - 而这不是他要问的。【参考方案3】:

为了将来参考,Google 增加了对大文件上传(最大 50 MB)的支持:新功能作为Blobstore API 的一部分发布,并在here 进行了讨论。

【讨论】:

That link 声明最大对象大小:2 GB。我不知道它什么时候改变了,但这仍然是个好消息:)【参考方案4】:

我想,Thomas L Holaday 的答案是正确的答案。无论如何,以防万一,这里有一个 Amazon Web Services SDK for App Engine (Java) 的链接,您可以使用它,例如将文件从 App Engine 上传到 Amazon S3。 (编辑:哦,刚刚注意到 -- S3 除外) http://apetresc.wordpress.com/2010/06/22/introducing-the-gae-aws-sdk-for-java/

由阿德里安·佩特雷斯库撰写。从他的网站:

[它是]亚马逊网络服务的一个版本 将从内部运行的 Java SDK 谷歌应用引擎。这不会 如果您只是包含 JAR,则可以工作 AWS 直接提供给 GAE 的 WAR,因为 GAE 的安全模型 不允许 Apache Commons HTTP 客户端创建套接字和 低级网络原语 it 需要建立一个HTTP 联系;相反,谷歌要求 你通过 它的 URLFetch 实用程序

【讨论】:

另外,我应该指出,它也很有可能与 S3 一起使用。只需从 build.xml 文件中删除过滤器并对其进行测试即可尝试一下。我很好奇结果是什么。【参考方案5】:

一些 Google App Engine + S3 链接:

Previous related post... 10mb limit.

This link demonstrates small file uploads。我还没有找到大上传的例子……

This link 展示了一种不同的方法,(with a fix for a known issue)

【讨论】:

以上是关于Google App Engine 和 Amazon S3 文件上传的主要内容,如果未能解决你的问题,请参考以下文章

Google App Engine Flexible 和 Google Container Engine 之间的区别?

sql GQL - Alternativa和没有Google App Engine一样

Google App Engine 和 404 错误

如何在 Google Cloud Functions 和 Google App Engine 之间进行选择?

App Engine 和 Google 游戏服务 clientId 冲突

Google Cloud Tasks 和 Google App Engine Python 3