0

1)我有上传表格

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 存储桶?

4

2 回答 2

1

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

于 2014-01-10T21:47:01.370 回答
0

您可以考虑使用更直接的POST 到 S3 功能。适用于 PHP 的 AWS 开发工具包有一个类可帮助生成表单数据

于 2013-10-07T16:45:19.363 回答