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存储桶的有效方法?
答案 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。