IE9下载问题php pdf等文件

时间:2013-06-21 08:27:41

标签: php internet-explorer http-headers download

我有一个PHP函数,在单击按钮后下载不同的文件(如果我们点击PDF按钮,它将加载一个pdf文件,如果我们点击DOC按钮,它将加载一个doc文件)。两个按钮的功能相同。

我的问题是我下载文件的时候。如果它是PDF,IE将打开另一个页面,并将关闭它并让我选择下载文件,但如果它是DOC,IE将打开另一个页面,而不是关闭它。

代码(对我而言)相同,我没有看到任何差异。

<pre>
<code>
    public function lettrecadrageAction() {

     $nom = $_POST['type'];
     switch ($nom):

      case 'Fichier DOC' :

       $path = "ddl/lettre_de_cadrage.doc";
       header('Content-Description: File Transfer');
       header("Content-Type: application/force-download");
       header("Content-Disposition: attachment; filename=lettre_de_cadrage.doc");
       header('Content-Transfer-Encoding: binary');
       header('Expires: 0');
       header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
       header('Pragma: public');
       header('Content-Length: ' . filesize($path));
       ob_clean();
       flush();
       readfile($path);
       break;

      case 'Fichier PDF' :

       $path = "ddl/lettre_de_cadrage.pdf";
       header('Content-Description: File Transfer');
       header('Content-Type: application/force-download');
       header("Content-Disposition: attachment; filename=lettre_de_cadrage.pdf");
       header('Content-Transfer-Encoding: binary');
       header('Expires: 0');
       header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
       header('Pragma: public');
       header('Content-Length: ' . filesize($path));
       ob_clean();
       flush();
       readfile($path);
       break;
      endswitch;
     exit;
    }
</code>
</pre>

单击

的Js操作
<pre>
    <code>
$('.ldc_dl').click(function() {
        var f = document.createElement("form");
        f.method = "POST";
        f.name = "form";
        f.target = "_blank";
        f.setAttribute('style', 'display: none;');
        f.action = "http://" + document.domain + "/Exploitation/lettrecadrage/";
        var fHtml = document.createElement("input");
        fHtml.type = "text";
        fHtml.name = "type";
        fHtml.value = $(this).html();
        console.log(fHtml);
        var fSubmit = document.createElement("input");
        fSubmit.type = "submit";
        f.appendChild(fHtml);
        f.appendChild(fSubmit);
        document.body.appendChild(f);
        f.submit();
        document.body.removeChild(f);

        return true;
    }) </code>
</pre>

按钮的HTML代码

<pre>
  <code>
    <div class="tab-pane fade" id="ldc"> 
        <p>La lettre de cadrage est disponible en <button id="ldc_dl_doc" class="btn btn-link ldc_dl" type="button">Fichier DOC</button></p>
        <p> Ou en <button id="ldc_dl_pdf" class="btn btn-link ldc_dl" type="button">Fichier PDF</button></p>
    </div>
  </code>
</pre>

(按钮是'Fichier PDF'和'Fichier DOC')

修改 - 解决方案

在评论的jbl帮助下,我使用iframe解决了我的问题:

var frame = document.createElement("iframe");
frame.setAttribute("src", "_blank");

并修改我的表单目标

            f.target = frame;

2 个答案:

答案 0 :(得分:0)

在MIME电子邮件中使用

Content-Transfer-Encoding标头。通过HTTP发送它没有任何意义。

Content-Disposition: attachment;标题说浏览器保存它而不是在浏览器中打开。因此,我建议不要使用Content-Type: application/force-download而是为PDF和DOC文件使用适当的内容类型:

Content-Type: application/pdf
Content-Type: application/vnd.ms-word

答案 1 :(得分:0)

在评论的jbl帮助下,我使用iframe解决了我的问题:

var frame = document.createElement("iframe");
frame.setAttribute("src", "_blank");

并修改我的表单目标

        f.target = frame;