yii框架裏實現文件下載,及多文件壓縮包下載

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);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章