分段上传期间的AWS SDK echo输出?

时间:2014-03-28 20:47:26

标签: php amazon-web-services

我正在使用当前版本的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必须支持这一点,对吗?如果是这样,实现这种效果的最简单方法是什么?

1 个答案:

答案 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查看您将收到哪些数据。