sty*_*ets 17 php file-upload multipart amazon-s3 amazon-web-services
(我是亚马逊AWS/S3的新手,所以请耐心等待我)
我的最终目标是允许我的用户使用他们的网络浏览器将文件上传到S3,我的要求是:
我的两部分问题是:
甚至可以为大文件执行此操作吗?如果是这样的话?
如果可以直接上传到S3,我该如何处理暂停/恢复?
PS.我正在使用PHP 5.2+
Ste*_*pel 11
同时可用的AWS SDK for JavaScript(在浏览器中)支持Amazon S3,包括一个类ManagedUpload,以支持手头用例的多部分上传方面(有关详细信息,请参阅前面的更新).现在,它可能是您的场景的最佳解决方案,例如,请参阅使用文件API上传本地文件,以获得依次使用HTML5文件API的简明示例- 介绍博客文章在AWS SDK中宣布Amazon S3托管上传器JavaScript提供了有关此SDK功能的更多详细信息.
我的初步答案显然错过了主要观点,因此要澄清:
如果要通过简单的HTML表单进行基于浏览器的上载,则限制使用POST对象操作,该操作使用HTML表单将对象添加到指定的存储桶:
POST是PUT的另一种形式,它允许基于浏览器的上传作为将对象放入存储桶的方式.通过HTTP标头传递给PUT的参数将作为表单字段传递给multipart/form-data编码的消息体中的POST.[...]
上传在此处通过单个操作处理,因此不支持暂停/恢复,并将您限制为原始最大对象大小为5千兆字节(GB)或更少.
您只能通过使用REST API进行分段上传来克服这两个限制,而后者又由AWS SDK for PHP用于实现此功能.
这显然需要服务器(例如在EC2上)来处理通过浏览器启动的操作(这使您可以轻松地促进S3存储桶策略和/或IAM策略以进行访问控制).
一种替代方案可能是使用JavaScript库并执行此客户端,请参阅例如jQuery Upload Progress和AJAX文件上载以获取初始指针.不幸的是,没有适用于AWS的规范JavaScript SDK(aws-lib令人惊讶地甚至不支持S3) - 显然knox的一些分支已添加了多部分上传,请参阅例如slakis的fork,我没有使用其中任何一个来使用尽管如此.
如果可以直接将[大文件]上传到S3,我该如何处理暂停/恢复?
在AWS SDK的PHP支持的方式上传大文件到Amazon S3 低级别的PHP API的多部分上传:
AWS SDK for PHP公开了一个与用于分段上传非常类似的Amazon S3 REST API的低级API(请参阅使用REST API进行分段上传).当您需要暂停和恢复分段上传,在上传过程中更改零件尺寸或者事先不知道数据大小时,请使用低级API.只要您没有这些要求,请使用高级API(请参阅使用高级PHP API进行分段上传).[强调我的]
Amazon S3可以处理从1个字节到5 TB的对象,请参阅相应的介绍性文章Amazon S3 - 现在的对象大小限制5 TB:
[...]现在,客户可以将极大的文件存储为单个对象,这极大地简化了他们的存储体验.Amazon S3为我们的客户在幕后进行簿记,因此您现在可以像对待任何其他Amazon S3对象一样获取该大对象.
为了存储更大的对象,您将使用上个月我在博客上发布的新的Multipart Upload API来部分上传对象.[...]
| 归档时间: |
|
| 查看次数: |
15753 次 |
| 最近记录: |