【问题标题】:Splitting and uploading extremely large (10+ GB) files to Amazon S3将超大 (10+ GB) 文件拆分并上传到 Amazon S3
【发布时间】:2012-07-27 04:58:04
【问题描述】:

我正在通过 AJAX 将文件上传到 Amazon S3(使用浏览器文件 API 并将实际上传脚本作为 iframe 存储在 Amazon S3 上,以解决 Amazon S3 跨站点问题,感谢 jquery-file-upload这个想法)。我有这个工作,它适用于小文件(

根据我对 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 上的文件加入应用程序)。

【问题讨论】:

  • 您确定要通过浏览器执行此操作吗?除了复杂性之外,上传 10GB 以上的文件意味着页面要打开一段时间。这是现实的(如果页面关闭怎么办)?制作一个可以从桌面访问 S3(甚至购买一个)的小型应用程序不是更好吗?
  • @Rogier 你是对的,它可能不是最好的解决方案(即使是可行的解决方案)。我试图避免在客户端安装任何东西,但对于非常大的文件来说这看起来不太现实。你提到的路线几乎是我倾向于的路径。
  • 是的。根据平台的不同,您可以使用例如 Transmit(Mac 上的 im)并制作一个 droplet(拖动一个放置文件进行上传)。花费一点钱,但就小时数而言,您无法超越;-)

标签: html file-upload amazon-s3 amazon-ec2 xmlhttprequest


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 2013-09-09
    • 2015-10-28
    • 1970-01-01
    相关资源
    最近更新 更多