我正在使用当前版本的Amazon Web Services PHP SDK。我正在尝试使用multipart上传器将文件上传到S3。它的工作就像一个魅力!
几乎。
这是代码中最相关的部分。
$uploader = UploadBuilder::newInstance()
->setClient($s3)
->setSource($file_to_upload)
->setBucket($bucket)
->setKey($key)
->setMinPartSize(25 * 1024 * 1024)
->setOption('ACL', 'public-read')
->setConcurrency(3)
->build();
$uploader->upload();
反正。它很棒。但是,我使用的RackSpace服务器有点迟钝,并且它会杀死运行时间过长而不创建任何输出的脚本。这在上传非常大的文件时往往是个问题。刷新数据解决了这个问题,但是...我不能在我的生活中找出如何在上传中输出数据!
AWS必须支持这一点,对吗?如果是这样,实现这种效果的最简单方法是什么?
答案 0 :(得分:1)
上传程序会发出几个可以挂钩的事件。它实际上没有记录,因此您可能需要查看Aws\Common\Model\MultipartUpload\AbstractTransfer
的代码。
您可以使用6 events:
multipart_upload.before_upload
multipart_upload.after_upload
multipart_upload.before_part_upload
multipart_upload.after_part_upload
multipart_upload.after_abort
multipart_upload.after_complete
要为事件注册侦听器,您可以在$uploader->upload()
之前执行类似于以下操作的操作。在这个听众中,你可以做任何你想做的事。
$uploader->getEventDispatcher()->addListener(
'multipart_upload.after_part_upload',
function($event) {
// Do whatever you want
echo $event['state']->count() . " parts uploaded.\n";
}
);
有一些东西传递给侦听器可用的$event
对象。 Look in the code查看您将收到哪些数据。