我正在尝试从我在php中构建的webservice下载文件:
$file = "pdffile.pdf";
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
当我在浏览器中尝试此代码时,Firefox下载文件(带有文件名),但当我尝试在Mac OS中打开文件时,预览应用程序会出现此错误:
It may be damaged or use a file format that Preview doesn’t recognize.
知道这有什么问题吗?
答案 0 :(得分:1)
可能你遇到了文件不存在的情况(因为你没有路径,只有名字),因此没有返回任何内容。添加其他:
else
{
header('Content-Type: text/html');
echo "File didn't exist";
}
对于您的文件名,请使用相对于PHP文件的路径,例如:
$file = "./pdffile.pdf";
或使用绝对路径,如:
$file = "c:/pdffile.pdf";
另外,对于PDF内容类型,您可能希望使用以下内容来代替application / octet-stream:
header('Content-Type: application/pdf');
答案 1 :(得分:0)
尝试删除以下行
header('Content-Length:'。filesize($ file));
如果需要后台处理,通常会使用此选项。可能是因为在你的情况下下载完成之前应该是因为指定的文件大小与文件不同。