多部分上传时的AWS SDK回声输出


AWS SDK echo output during multipart upload?

我使用的是当前版本的Amazon Web Services PHP SDK。我正在尝试使用多部分上传器将文件上传到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必须支持这个,对吗?如果是这样,实现这一效果的最简单方法是什么?

上传程序发出几个您可以挂钩的事件。它确实没有文档记录,所以您可能需要查看Aws'Common'Model'MultipartUpload'AbstractTransfer的代码。

你可以使用6个事件:

  • 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对象的内容可供侦听器使用。查看代码,看看您将收到什么数据。