2016-01-21 17 views
6

Desidero scaricare un file di grandi dimensioni con Guzzle e tenere traccia dell'avanzamento. Non so se devo passare un flusso o usare il RequestMediator in qualche modo.Guzzle 6 avanzamento download

  • Ho provato con la sottoscrizione all'evento curl.callback.progress, ma la richiesta PSR 7 non ha un dispatcher di eventi.
  • Ho provato il on_stats, ma il callback è stato attivato alla fine.
  • Il plugin abbonato progresso è deprecato https://github.com/guzzle/progress-subscriber

sto testando il seguente codice.

$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(); 

Un suggerimento sarebbe apprezzato.

risposta

12

Sebbene non sia menzionato nella documentazione, è possibile utilizzare l'opzione di richiesta "avanzamento".

Riferimenti a esso possono essere trovati here.

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

Perfetto, grazie! – Laoneo

Problemi correlati