2016-01-21 4 views
6

Я хочу загрузить большой файл с помощью Guzzle и хочу отслеживать прогресс. Я не знаю, должен ли я передавать поток или использовать RequestMediator каким-то образом.Guzzle 6 Прогресс загрузки

  • Я попытался подписаться на событие curl.callback.progress, но запрос PSR 7 не имеет диспетчера событий.
  • Я пробовал on_stats, но обратный вызов запускается только в конце.
  • Абонентская плагин прогресс является устаревшим https://github.com/guzzle/progress-subscriber

Я проверяю следующий код.

$dl = 'http://archive.ubuntu.com/ubuntu/dists/wily/main/installer-amd64/current/images/netboot/mini.iso'; 
    $client = new Client([]); 

    $request = new GuzzleHttp\Psr7\Request('get', $dl); 
    $promise = $this->client->sendAsync($request, [ 
      'sink' => '/tmp/test.bin' 
    ]); 
    $promise->then(function (Response $resp) use ($fs) { 
     echo 'Finished'; 
    }, function (RequestException $e) { 
    }); 
    $promise->wait(); 

Подсказка будет оценена.

ответ

12

Хотя, не упомянутый в документации, вы можете использовать опцию запроса прогресса.

Ссылки на него можно найти here.

$options = [ 
    'progress' => function ($dl_total_size, $dl_size_so_far, $ul_total_size, $ul_size_so_far) { 
     // do something. 
    } 
]; 
+0

Отлично, спасибо! – Laoneo

Смежные вопросы