简体   繁体   中英

Zip file is not downloading in Yii2

I am trying to download the zip file with many images.This code is working when i call the path in browser but not downloading when i call from Jquery ajax.Need to change or add anything in header?please help.

Controller:

public function actionZipdownload(){

    $files = Yii::$app->request->post('imgsrc');
    //it displays the URLs.

    $zip = new \ZipArchive();

    $tmp_file = tempnam('.', '');

    $zip->open($tmp_file, ZipArchive::CREATE);

    foreach ($files as $file) {
        $download_file = file_get_contents($file);
        $zip->addFromString(basename($file), $download_file);
    }

    $zip->close();

    header('Content-disposition: attachment; filename="my file.zip"');
    header('Content-type: application/zip');
    readfile($tmp_file);
    unlink($tmp_file);
}

Jquery :

$.ajax({
   url:url+'site/zipdownload',
   data:{'imgsrc':imgsrc},
   type:'POST',
   success:function(data){
        //alert(data);  
          }
});

In console response:

在此处输入图片说明

I just ignore the Jquery Ajax and done it by Html::a with two actions..When i am calling the url in a tag then the file got downloaded.And also done some changes in controller.

Views:

<?=Html::a('Create Zip',['site/zipdownload'],['class'=>'btn btn-danger pull-left'])?>
<?=Html::a('Download',['site/download'],['class'=>'btn btn-danger pull-left'])?>

Controller:

public function actionZipdownload(){

        $files = Yii::$app->request->post('img_src');

        $zip = new \ZipArchive();

        $tmp_file = 'uploads/images.zip';

        if(file_exists($tmp_file)){
            $zip->open($tmp_file, ZipArchive::OVERWRITE);
        }
        else{
            $zip->open($tmp_file, ZipArchive::CREATE);
        }
        $i=1;

        foreach ($files as $file) {
            $download_file = file_get_contents($file);

            $fileParts = pathinfo($file);
            $filename = $i.explode("?",$fileParts['filename'])[0];
            $zip->addFromString($filename, $download_file);
            $i++;
        }

        $zip->close();
    }

    public function actionDownload(){
        $path = 'uploads/images.zip';
        if(file_exists($path)){
        \Yii::$app->response->sendFile($path)->send();
        unlink($path);
        }
        else{
            return $this->redirect(['site/dashboard']);
        }
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM