(我是亚马逊AWS / S3的新手,所以请耐心等待我)
我的最终目标是允许我的用户使用他们的网络浏览器将文件上传到S3,我的要求是:
我的两部分问题是:
甚至可以为大文件执行此操作吗?如果是这样的话?
如果可以直接上传到S3,我该如何处理暂停/恢复?
PS。我正在使用PHP 5.2 +
答案 0 :(得分:11)
同时可用的AWS SDK for JavaScript (in the Browser)支持Amazon S3,包括类ManagedUpload以支持手头用例的分段上传方面(有关详细信息,请参阅前面的更新)。现在,它可能是您的方案的最佳解决方案,例如, Uploading a local file using the File API有关使用HTML5 File API的简明示例 - 介绍性博文Announcing the Amazon S3 Managed Uploader in the AWS SDK for JavaScript提供了有关此SDK功能的更多详细信息。
我的初步回答显然错过了要点,所以要澄清:
如果您想通过简单的HTML表单进行基于浏览器的上传,则限制使用POST Object operation,使用HTML表单将对象添加到指定的存储区:
POST是PUT的另一种形式,它支持基于浏览器的上传 一种将对象放入存储桶的方法。传递给PUT的参数 通过HTTP Headers作为表单字段传递给POST中的POST multipart / form-data编码的消息体。 [...]
上传在此处通过单个操作处理,因此不支持暂停/恢复,并将您限制为原始最大对象大小 5千兆字节(GB)或更少。
您只能通过Using the REST API for Multipart Upload instead克服这两个限制,而AWS SDK for PHP等SDK会使用这些限制来实现此功能。
这显然需要服务器(例如在EC2上)来处理通过浏览器发起的操作(这使您可以方便地S3 Bucket Policies和/或IAM Policies进行访问控制。
一种替代方案可能是使用JavaScript库并执行此客户端,请参阅例如jQuery Upload Progress and AJAX file upload表示初始指针。 不幸的是,没有适用于AWS的规范JavaScript SDK(aws-lib令人惊讶地甚至不支持S3) - 显然knox的一些分支添加了分段上传,例如, slakis's fork,我没有将这些中的任何一个用于手头的用例。
如果可以直接将[大文件]上传到S3,我该如何处理 暂停/恢复?
AWS SDK for PHP支持通过Low-Level PHP API for Multipart Upload将大型文件上传到Amazon S3:
AWS SDK for PHP公开了一个与API非常相似的低级API 用于分段上传的Amazon S3 REST API(请参阅使用REST API for 分段上传)。 需要暂停时使用低级API 恢复分段上传,在上传过程中改变零件尺寸,或者不上传 事先了解数据的大小。使用高级API(请参阅 每当您不使用高级PHP API进行分段上传时 有这些要求。 [强调我的]
Amazon S3可以将对象从1个字节一直处理到5TB(TB),请参阅相应的介绍性帖子Amazon S3 - Object Size Limit Now 5 TB:
[...]现在客户可以存储极其 大文件作为单个对象,大大简化了它们的存储 经验。亚马逊S3为我们的幕后做了簿记 客户,所以你现在可以像你一样获得那个大对象 任何其他Amazon S3对象。
为了存储更大的对象,您可以使用我上个月发布的新Multipart Upload API来上传对象 部分。 [...]
答案 1 :(得分:0)
我不知道任何闪存上传器提供比标准HTTP Post更强大的功能,但您可以通过服务器上的协调软件为客户端开发自己的闪存软件。