将下载zip文件返回到浏览器下载窗口

时间:2013-01-18 19:26:40

标签: jquery

  

可能重复:
  Return automatic download JQuery Ajax Call

我正在用PHP创建一个zip-fly文件。创建文件没有问题。即使我将它设置为不保存在服务器上,但立即开始下载。

在该文件中,我通过按下按钮从另一个文件中调用jquery。代码如下。

$(".down").on("click",function(){
  id = this.id;
  $.ajax({
    type: "POST",
    url: "files/down.php",
    data: "id="+id,
    cache: false,
    success: function(data){
        //alert(data)
    }
  });
});

我希望当你点击按钮时我会显示浏览器下载窗口而我不这样做...而且不知道如何......

一切正常,因为如果我告诉PHP将文件保存在服务器上。如果你告诉我alert()中的答案让我充满了奇怪的符号,那么有些东西正在回归,而不是如何通过下载窗口回复给我。

有谁知道怎么做?

1 个答案:

答案 0 :(得分:-1)

如果您不想使用Iframe。

我成功使用了这个方法:

  1. 执行ajax调用,让脚本压缩并将其临时保存在服务器上。
  2. 将此临时存储文件的链接返回到js /或将动态返回文件的链接。
  3. 设置指向window.location.replace()
  4. 的链接

    我使用的代码。

    在js部分只需调用ajax请求,并等到它完成, 这就是我用来将文件返回到服务器端的脚本以获取伪文件位置。:

    $fakefile = $doc['doc_name'];
    
    $finfo = new finfo(FILEINFO_MIME);
    $mm_type = $finfo->file($realfile);
    
    header("Cache-Control: public, must-revalidate"); 
    header("Pragma: no-cache"); 
    header("Content-Type: " . $mm_type); 
    header("Content-Length: " .(string)(filesize($realfile)) ); 
    header('Content-Disposition: attachment; filename="'.$fakefile.'"'); 
    header("Content-Transfer-Encoding: binary"); 
    readfile($realfile);
    exit;
    

    回到js:捕捉回复:

    $.post( href, null,
      function(data) {
    
      // file exist and is downloadable for user - call it for real.
      if(data.success === 1) {
         window.location.replace(href);
      }
      // there were errors  - display message.
      }
    },'json');
    

    希望它有所帮助。