2017-07-31 2 views
0

J'essaie de télécharger le fichier zip avec beaucoup d'images.Ce code fonctionne quand j'appelle le chemin dans le navigateur mais ne télécharge pas quand j'appelle de Jquery ajax.Need pour changer ou ajouter quelque chose dans En-tête? S'il vous plaît aider.Le fichier Zip ne se télécharge pas dans Yii2

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); 
      } 
}); 

En réponse console:

enter image description here

Répondre

0

J'ignoreront simplement la Jquer y Ajax et fait par Html::a avec deux actions .. Lorsque j'appelle l'URL dans une balise, puis le fichier a été téléchargé.Et aussi fait quelques changements dans le contrôleur.

Vues:

<?=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']); 
     } 
    }