yii框架里实现文件下载,及多文件压缩包下载

6 篇文章 0 订阅

yii框架里实现文件下载,及多文件压缩包下载

开发中,经常会用到下载文件,对文件下载需要以压缩包的形式下载下来,单文件下载有时候遇到图片或txt文件时,浏览器会直接输出,而不是以文件的形式下载,今天的例子适用于图片、txt文件、其他文件均已文件的形式下载:

代码实例,例如:

#单文件下载文件

    #文件绝对地址
    $filePath= 'https://www.test.com/file/测试.txt';
    #获取文件名 测试.txt
    $saveAsFileName = end(explode('/',$filePath));
    #这里获取文件名,不可用pathinfo()函数,basename虽然一般在本地可以正常获取,但是提交阿里服务器时,有时会出现获取不到,获取不完整的情况,我遇到的是只获取到了后缀,文件名缺失

    public function downloadFile($filePath, $saveAsFileName)
    {
        $filename = $filePath;
        $saveAsFileName = iconv('utf8', 'gbk', $saveAsFileName);
        $file = fopen($filename, "rb");
        Header("Content-type:  application/octet-stream ");
        Header("Accept-Ranges:  bytes ");
        Header("Content-Disposition:  attachment;  filename= {$saveAsFileName}");
        $contents = "";
        while (!feof($file)) {
            $contents .= fread($file, 8192);
        }
        echo $contents;
        fclose($file);
    }


#多文件以压缩包的形式下载
public function downLoadFiles(){

    $filePath = [
        'https://www.test.com/file/小草.jpg',
        'https://www.test.com/file/测试.txt',
        'https://www.test.com/file/通关考试.doc',
        'https://www.test.com/file/答案.docx',
    ];

    $tmpFile = tempnam('/tmp', '');
    $zip = new ZipArchive;
    $zip->open($tmpFile, ZipArchive::CREATE);
    foreach ($files as $file) {
          // download file
          $fileContent = file_get_contents($file);
          $file = iconv('utf-8', 'GBK', basename($file));
                    $zip->addFromString($file, $fileContent);
                }
          $zip->close();
          header('Content-Type: application/zip;charset=utf8');
          header('Content-disposition: attachment; filename=附件' . date('Y-m-d') . '.zip');
          header('Content-Length: ' . filesize($tmpFile));
          readfile($tmpFile);
          unlink($tmpFile);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值