S3 Bucket亚马逊问题

时间:2013-10-07 15:13:54

标签: php zend-framework file-upload amazon-s3

1)我上传表格

2)它将文件上传到我的本地存储move_uploaded_file。

3)它使用zend putObject函数将文件移动到s3对象。

一切正常,直到我的文件大小约为30Mb到40Mb。问题是当我尝试上传更大的文件,如80 Mb,100 Mb左右时,移动到s3的文件需要很长时间才能完成上传。我的代码是这样的:

$orginalPath = APPLICATION_PATH."/../storage/".$fileName;
move_uploaded_file($data['files']['tmp_name'], "$orginalPath");

$s3 = new Zend_Service_Amazon_S3($accessKey, $secretKey);

$s3->putObject($path, file_get_contents($orginalPath),
    array(Zend_Service_Amazon_S3::S3_ACL_HEADER =>Zend_Service_Amazon_S3::S3_ACL_PUBLIC_READ));

你能帮忙解决如何快速处理大文件我试过像这样使用streamWrapper

$s3->registerStreamWrapper("s3");


file_put_contents("s3://my-bucket-name/orginal/$fileName", file_get_contents($orginalPath));

但没有运气,移动文件需要相同的时间。

因此,是否有一种将文件快速移动到s3存储桶的有效方法?

2 个答案:

答案 0 :(得分:1)

答案是工人流程。您可以在服务器启动时通过PHP CLI启动PHP工作程序脚本,也许可以在您的盒子上运行GearmanClient php扩展和gearman服务器。然后排队后台作业以将文件上传到S3,同时您的主站点PHP代码在发出作业后返回成功,并且文件愉快地在后台上传,而前景站点继续以它的快乐方式继续。另一种方法是让另一台服务器完成所有这项任务,同时您的主站点仍然可以免于此过程。我现在正在这样做。效果很好。

答案 1 :(得分:0)

您可以考虑使用更直接的POST to S3 feature。 AWS SDK for PHP有一个class to help generate the data for the form