我正在通过AJAX将文件上传到Amazon S3(使用浏览器文件API并将实际上传脚本存储在Amazon S3上作为iframe来解决Amazon S3跨站点问题,感谢jquery-file-upload for这个想法)。我有这个工作,它适用于小文件(<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上的文件加入应用程序)。
答案 0 :(得分: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