我正在一个网站上做一些工作,该网站有一个安全区域,只有在用户登录后才可供用户使用。在这个区域有一个页面,其中包含可以下载的 pdf 文档的链接。物理文档位于网站的根目录之外。pdf 文档的链接如下所示:
index.php?page=secure-area/download&file=protected.pdf
它执行以下操作(注意:我知道这是强制下载而不是在浏览器中打开文件的方法):
// check security, get filename from request, prefix document download directory and check for file existance then...
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="' . basename($file) . '"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
header('Connection: Close');
set_time_limit(0);
readfile($file);
这很好用,但在 Firefox 3 和 Internet Explorer 7(我没有用任何其他浏览器测试过)不会在浏览器中打开这个文件,它们都显示下载对话框(如预期的那样)。如果我选择打开而不是保存,则会下载文档并在浏览器之外启动 Adobe Reader 以呈现文档。
我遇到的问题是在浏览器中下载文件并在保存时具有正确的默认文件名。
我希望文档在浏览器中打开。一种方法是使用标题“Content-Disposition: inline;” 但这意味着我无法指定文件名(因为似乎被浏览器忽略了)。这样做的问题是当我保存文档时,默认名称是 URL 的名称,而不是 pdf 文档的文件名:
http___example.com_index.php_page=secure_area_download&file=protected.pdf
如何让 Firefox 和 Internet Explorer 在浏览器中打开文档并提供正确的默认文件名进行保存?