1

ボタンをクリックした後にさまざまなファイルをダウンロードする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;
4

2 に答える 2

0

Content-Transfer-Encodingヘッダーは、MIME 電子メール メッセージで使用されます。HTTP 経由で送信しても意味がありません。

Content-Disposition: attachment;ヘッダーは、ブラウザーで開くのではなく、保存するようにブラウザーに指示します。代わりにContent-Type: application/force-download、PDF および DOC ファイルに適切な content-type を使用することをお勧めします。

Content-Type: application/pdf
Content-Type: application/vnd.ms-word
于 2013-06-21T09:24:33.483 に答える