(我是新来的亚马逊AWS / S3,所以请多多包涵)
我的最终目标是让我的用户使用其Web浏览器的文件上传到S3,我的要求是:
- 我必须处理大型文件(2GB +)
- 我必须支持进度指示器暂停/恢复
- (可选但可取的!)有能力继续上传,如果连接暂时中断了
我的两个部分的问题:
- 我读过关于S3多上载,但我怎么能实现基于web浏览器的上载的暂停/恢复还不清楚。
它甚至有可能为大文件做到这一点? 如果是的话怎么样?
- 我应该将文件上传到EC2然后将它们移到S3一旦我做了什么? 我可以(安全)上传文件直接S3,而不是使用一个临时的。 网络服务器?
如果它是可以直接上传到S3,我该怎么处理暂停/恢复?
PS。 我使用PHP 5.2+
更新20150527
可用的同时AWS SDK对JavaScript(在浏览器)支持亚马逊S3,其中一类ManagedUpload支持用例在手的多上传方面(见这个前更新更多)。 现在它可能是您的情况最好的解决方案。因此,例如参见上传使用File API本地文件为使用一个简洁的例子HTML5文件API反过来-介绍博客文章在AWS SDK宣布亚马逊S3托管上传了JavaScript的提供了有关此SDK功能的更多细节。
更新20120412
我最初的回答显然错过了要点,所以澄清:
如果你想通过做简单的HTML形式的基于浏览器的上传,你被限制使用POST对象操作 , 使用HTML表单它增加了一个对象到指定的水桶 :
POST是PUT的替代形式,它使基于浏览器的上传,把物体在桶的方法。 所传递经由HTTP头把参数传递,而不是作为表单字段中的multipart / form-data的编码消息主体立柱。 [...]
上传在这里单个操作处理,因此不支持暂停/恢复和限制你5千兆字节(GB)或更小的原始最大对象的大小。
您只能通过克服了两者的限制使用多部分上传来代替REST API ,这反过来使用,如软件开发工具包AWS SDK的PHP来实现这个功能。
这显然需要一个服务器(例如,在EC2)来处理通过浏览器(它允许您方便启动操作S3斗政策和/或IAM策略的访问控制容易为好)。
在一个替代方案可能使用的是JavaScript库,并执行该客户端,例如见jQuery的上传进度和AJAX文件上传的初始指针。 不幸的是没有规范的JavaScript SDK可用的AWS( AWS-lib的令人惊讶的竟然不支持S3还) -显然的一些叉诺克斯增加了多载,例如参见slakis的叉 ,我没有使用其中任一为用在手的情况下,虽然。
最初的回答
如果有可能上传[大文件]直接S3,我该怎么处理暂停/恢复?
在AWS SDK的PHP支持的方式上传大文件到Amazon S3 低级别的PHP API的多部分上传 :
AWS的SDK的PHP暴露了一个低级别的API,它非常类似于多上传亚马逊的S3 REST API(请参阅使用多部分上传的REST API)。 当你需要暂停和恢复多上传,上传过程中改变零件尺寸,或不知道数据的大小提前使用低级别的API。 使用高级API(请参阅使用多部分上传的高级PHP API)每当你没有这些要求。 [重点煤矿]
亚马逊S3可以处理1个字节一路5个千兆字节(TB)的对象,请参见相应的介绍后亚马逊S3 -对象大小限制现在5 TB :
[...]现在,客户可以存储非常大的文件作为单个对象,从而大大简化了他们的存储体验。 亚马逊S3确实在幕后为我们的客户背后的簿记,所以你现在可以得到大的物体,就像你将任何其他Amazon S3对象。
为了存储更大的对象,你会使用新的多部分上传API ,我的博客上讲述上个月上传的部分对象。 [...]
我不知道任何Flash上传者提供什么比标准的HTTP发布功能更强大,但你可以开发自己的闪存软件与服务器上的协调软件客户端。