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