guzzlehttp/guzzle 配合 symfony/console 命令行中实现文件下载进度条

guzzlehttp/guzzle 配合 symfony/console 命令行中实现文件下载进度条

usage

安装 guzzlehttp/guzzlesymfony/console

$ composer require guzzlehttp/guzzle
$ composer require symfony/console

代码示例

#!/usr/bin/env php
<?php

require __DIR__.'/vendor/autoload.php';

use GuzzleHttp\Client;
use Symfony\Component\Console\Helper\ProgressBar;
use Symfony\Component\Console\Output\ConsoleOutput;

$fileDownloadUrl = 'http://ws.stream.qqmusic.qq.com/M8000004q1zZ43bMMs.mp3?guid=749170908&vkey=B5BC4501101100E9E4A10A83EEF1DD8FD27E6BD4F6C47C05964182534A9408A822A4E043B158E6D1E16B60336C746F048D5E239713A3A803&uin=0&fromtag=66%';
$saveFilePath    = '/Users/yaozm/Downloads/熱河 - 不只是南方.mp3';
$isDownloaded    = false;
$output          = new ConsoleOutput();
$progressBar     = null;

$client = new Client([
    'sink'     => $saveFilePath,
    'progress' => function ($totalDownload, $downloaded) use ($output, &$progressBar, &$isDownloaded){
        if ($totalDownload > 0 && $downloaded > 0 && null === $progressBar) {
            $progressBar = new ProgressBar($output, $totalDownload);
            $progressBar->setFormat('very_verbose');
            $progressBar->start();
        }
        if (!$isDownloaded && $progressBar && $totalDownload === $downloaded) {
            $progressBar->finish();
            $output->writeln(PHP_EOL);

            return $isDownloaded = true;
        }
        if ($progressBar) {
            $progressBar->setProgress($downloaded);
        }
    },
]);

$client->get($fileDownloadUrl);
$output->writeln('Download completed');

相关链接

原文链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值