我有一个PHP文件,其中包含一个在新标签页中打开的.pdf文件的链接 - 这实际上只是打开了将PDF立即下载到用户的下载文件夹的页面 - 新标签页不会保持打开状态浏览器。这一切都运作良好。
我现在正在尝试更改它以便php页面将加载并在一页中下载pdf,而无需用户单击另一个链接来下载pdf文件。
以下是2页设置的结构 - viewReport.php
页面的链接如下:
$downloadLink = 'downloadFile.php?fileName='.$fileName.'&path='.$url;
$displayLink = 'This Report was successfully created. <a href="'.$downloadLink.'" class="alert-link" target="_blank">Click here</a> to view the PDF.';
downloadFile.php
页面包含以下内容:
$fileName = $_GET['fileName'];
header('Content-type: application/force-download');
header('Content-Disposition:filename="'.$fileName.'"');
echo $fm->getContainerData($_GET['path']);
可以立即下载PDF。我现在更改了viewReport.php
页面以包含此内容:
$downloadLink = 'downloadFile.php?fileName='.$fileName.'&path='.$url;
header('Content-type: application/force-download');
header('Content-Disposition:filename="'.$fileName.'"');
echo $fm->getContainerData($url);
当此页面加载时,它会下载一个无法打开的PDF文件,大约是使用2页版本生成的PDF文件的1/3,因此显然不是有效的PDF文件。此外,viewReport.php
页面在处理此行后仍会停止加载。下载pdf文件:
echo $fm->getContainerData($url);
然后似乎回到上一页。
这是我第一次尝试在单个页面中执行此操作,因此不确定是否可以通过这种方式执行此操作?
答案 0 :(得分:0)
您无法同时执行两个呈现新页面的操作,供用户查看,同时通过单个请求触发自动文件下载 。
问题是这两个操作都需要发送特定的标头才能传递其有效负载。显然,您正在看到需要设置的标题以触发文件下载,但是网页的传送还需要特定的标题,这些标题通常是在后台为您设置的。用于提供查看网页与文件下载的标题彼此不兼容 - 您只能在一个响应中发送一个或另一个。
尽管如此,使用javascript和ajax可能还有其他可行的解决方法。但最终归结为发送单独的请求以便接收两种情况所需的两组不同的标头。