我有一个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;
答案 0 :(得分:0)
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;