2013-10-07 215 views
0

1)我有上传表格S3 Bucket亚马逊问题

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

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

一切正常,直到我有大约30Mb到40 Mb的文件大小。问题是,当我尝试上传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存储桶的有效方法?

+1

什么问题?大文件总是需要更长的时间才能上传,而不是更小的文件。这个网络并不神奇,并且不能仅仅因为它们更大就适用于大文件。 –

回答

1

答案是一个工作进程。您可以在服务器启动时通过PHP CLI启动一个PHP工作者脚本,也许在您的盒子上运行一个GearmanClient php扩展和gearman服务器。然后,您排队后台作业,将文件上传到S3,而您的主站点PHP代码在发布作业后返回成功,并且文件在后台快乐地在后台上传,而前台网站继续以快乐的方式继续。这样做的另一种方式是让另一台服务器完成所有这些任务,而您的主站点仍然没有使用这个过程。我现在正在这样做。它运作良好。