我无法强制下载 pdf 文件
I can't force download a pdf file
我已经尝试搜索我的问题的解决方案大约 2 天了,但我似乎无法让我的代码工作。我的目标是点击按钮下载 PDF 文件,但我希望文件的路径对用户隐藏。我正在处理的项目正在使用 Kohana(3.3) 框架。我试图用 ajax 调用该函数:
public function action_download_pdf()
{
$this->auto_render = false;
if ($this->request->post()) {
$data = $this->request->post();
$file = 'uploads/pdfs_folder/'.$data['pdf_number'].'.pdf';
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.$data['pdf_number'].'.pdf');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
}
}
我收到状态代码:200 OK,但我只让它显示在我的开发者控制台的 "preview" 选项卡中。
https://i.stack.imgur.com/vyAiK.jpg
我不知道我应该怎么做才能下载它而不是那样显示它?
这对我来说非常有效。
if ($filename) {
header("Content-type: application/zip");
header("Content-Disposition: attachment; filename=".basename($filename));
header("Pragma: no-cache");
header("Expires: 0");
readfile("$filename");
}
下面的代码对我来说效果很好
<?php
if(isset($_REQUEST['path']) && $_REQUEST['path'] != "") {
$file_url = $_REQUEST['path'];
$pdfname = basename ($file_url);
header('Content-Type: application/pdf');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=".$pdfname);
readfile($file_url);
}
?>
我注意到你的代码
header('Content-Type: application/octet-stream');
PHP 中的内容类型引用很重要,
它是您要保护的文件的 MIME 类型。
例如,如果您保存的是 MP3 文件,则需要将 application/pdf 替换为 audio/mpeg。
希望对您有所帮助。
谢谢
这就是我解决问题的方法:
我在我的数据库中创建了一个 table,我在其中生成并保存了一个假号码和一个真实号码。
当我到达带有下载 PDF 按钮的步骤时,我通过该按钮提交了一个表单,该按钮触发了我的控制器中的一个功能。该功能是我最初发布的代码。我检查了 table 中的假号码并获得了真实号码。
我已经尝试搜索我的问题的解决方案大约 2 天了,但我似乎无法让我的代码工作。我的目标是点击按钮下载 PDF 文件,但我希望文件的路径对用户隐藏。我正在处理的项目正在使用 Kohana(3.3) 框架。我试图用 ajax 调用该函数:
public function action_download_pdf()
{
$this->auto_render = false;
if ($this->request->post()) {
$data = $this->request->post();
$file = 'uploads/pdfs_folder/'.$data['pdf_number'].'.pdf';
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.$data['pdf_number'].'.pdf');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
}
}
我收到状态代码:200 OK,但我只让它显示在我的开发者控制台的 "preview" 选项卡中。
https://i.stack.imgur.com/vyAiK.jpg
我不知道我应该怎么做才能下载它而不是那样显示它?
这对我来说非常有效。
if ($filename) {
header("Content-type: application/zip");
header("Content-Disposition: attachment; filename=".basename($filename));
header("Pragma: no-cache");
header("Expires: 0");
readfile("$filename");
}
下面的代码对我来说效果很好
<?php
if(isset($_REQUEST['path']) && $_REQUEST['path'] != "") {
$file_url = $_REQUEST['path'];
$pdfname = basename ($file_url);
header('Content-Type: application/pdf');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=".$pdfname);
readfile($file_url);
}
?>
我注意到你的代码
header('Content-Type: application/octet-stream');
PHP 中的内容类型引用很重要, 它是您要保护的文件的 MIME 类型。 例如,如果您保存的是 MP3 文件,则需要将 application/pdf 替换为 audio/mpeg。
希望对您有所帮助。
谢谢
这就是我解决问题的方法:
我在我的数据库中创建了一个 table,我在其中生成并保存了一个假号码和一个真实号码。 当我到达带有下载 PDF 按钮的步骤时,我通过该按钮提交了一个表单,该按钮触发了我的控制器中的一个功能。该功能是我最初发布的代码。我检查了 table 中的假号码并获得了真实号码。