我在Mozilla或Internet Explorer中设置PDF下载时遇到问题,因为您可能从标题中获得了。如果我出于某种原因试图下载something.pdf,那么它就变成了什么.pdf'在外部使用单引号,这当然使得无法读取,因为它不是有效的文件扩展名。我一直在寻找遇到同样问题的人,并且遇到的实例很少,其中没有一个解决方案对我有用。我很迷茫,并且一直试图想出这一个,所以我在这里。以下是发生下载的代码部分。 PHP变量$ OrderNumber只是一个五位数字,而$ FileNameToDownload是指向PDF位置的整个目录(我已经检查过以确认它没有单引号)。
header('Content-Description: File Transfer');
header('Content-Type: application/zip');
header("Pragma: public");
header("Expires: 0");
header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/download");
header("Content-Disposition: attachment;filename='$OrderNumber'");
header("Content-Transfer-Encoding: binary ");
header('Content-Length: ' . filesize($FileNameToDownload));
while(ob_get_level()) ob_end_clean();
flush();
readfile($FileNameToDownload);
唯一存在问题的浏览器是Mozilla和IE。在Chrome和Opera中,它似乎完美无缺。任何帮助都会受到赞赏,因为我已经停留了一段时间而没有前进。如果有另一种下载PDF的方法,我对此非常开放,但除了这个之外我发现并尝试的所有方法都给了我安全错误,因为它试图从中提取PDF。非常感谢,如果需要更多详细信息,我很乐意提供,但我尽可能地尽可能彻底。
答案 0 :(得分:4)
header("Content-Disposition: attachment;filename='$OrderNumber'");
如果您不想在文件名中使用引号,请不要在文件名中加上引号。
Firefox只是在做你要告诉它的事情,而不是假设你犯了错误。
header("Content-Disposition: attachment;filename=$OrderNumber");
除了:
header('Content-Type: application/zip'); header("Content-Type: application/force-download"); header("Content-Type: application/download");
文档只能有一个Content-Type。你为什么要设三个?
无论如何,它们都不正确。你说你在提供PDF:
header('Content-Type: application/pdf');
答案 1 :(得分:0)
当我从在Google Chrome浏览器中打开的页面保存文件时,它会自动在文件名两边加上单引号。例如,在Microsoft Dynamics中,当我生成列表然后导出到Excel时,无论如何都不会出现任何对话框屏幕来更改文件名,因此该文件将保存在指定的下载文件夹中,名称为“ something.xlsx”,因此单击它会给用户带来问题,他/她想使用哪个应用程序打开它。 例如,在IE11中就没有这种问题。