4

我正在通过 AJAX 将文件上传到 Amazon S3(使用浏览器文件 API 并将实际上传脚本存储在 Amazon S3 上作为 iframe 以解决 Amazon S3 跨站点问题,感谢 jquery-file-upload 的想法) . 我有这个工作,它适用于小文件(< 50 MB 左右)。但是,我希望在 Amazon S3 上存储超大文件。我想存储配置的虚拟机之类的东西,它的大小可能超过 10 GB。

根据我对 HTML5 文件 API 的理解,可以在客户端将大文件分块并上传。然后,服务器代码负责将文件连接在一起并将文件移动到 S3。我理解这个概念,但不确定最佳实施方式。

我使用 Heroku 作为应用服务器,我通常将文件直接上传到 Amazon S3,完全跳过 Heroku 的服务器。但是,如果我将上传内容分成小块,则必须先编写一些代码来连接这些部分,然后才能将其实际放入 S3。但是 Heroku 对它们可以使用多少数据有一些限制,而且我认为加入 10 GB 文件不会在他们的服务器上有效地工作(不是 100% 肯定,但值得怀疑)。

所以我目前的想法是我必须在 Amazon EC2 服务器上设置一个 Web 服务应用程序,我的应用程序将上传部分发布到该服务器上。然后,EC2 应用程序负责加入上传部分并将最终加入的文件放入 S3。将文件加载到 S3 后,S3 会向托管在 Heroku 上的原始应用程序发送响应,然后该应用程序会创建一个指向 S3 中存储文件的资源。

有没有什么现实的方法可以让一个单独的 EC2 服务器加入文件?在 EC2 和 S3 之间发送文件是免费的,但我不想维护 2 个应用程序来完成我想要的事情(Heroku 上的主应用程序和 EC2 上的文件加入应用程序)。

4

1 回答 1

3

Amazon S3 API 支持分段上传。文件在 S3 端自动合并。我不知道新的 html5 文件 API 有多灵活。如果您设法上传文件直接与 S3 对话(哇),您也许还可以使用多部分功能。

我可以询问您当前实施的示例吗?让我好奇

分段上传到 S3 的工作 原理 http://aws.typepad.com/aws/2010/11/amazon-s3-multipart-upload.html

用于分段上传的 REST API http://docs.amazonwebservices.com/AmazonS3/latest/dev/UsingRESTAPImpUpload.html

最棘手的事情(如果可能的话)可能是在浏览器中拆分一个(大)文件

在你开始为了酷而开发一些东西之前,请确保你的原始问题没有更实用/务实的解决方案

编辑:

文件切片是可能的 - 确实:html5 摇滚!

如果你很好地实现了这一点,你可能会去无限的文件大小而不会爆炸用户的记忆

https://developer.mozilla.org/en/docs/DOM/Blob

http://www.html5rocks.com/en/tutorials/file/dndfiles/#toc-slicing-files

于 2012-11-13T23:46:21.250 回答