【发布时间】: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