我在控制器中使用以下代码下载pdf文件,这些文件存储在codeigniter中应用程序文件夹内的文件夹中。 在视图页面中,我有一个按钮,单击它后,它会重定向到该控制器,然后下载该文件。它下载空白页(pdf)。 期待任何建议。
$filePath = APPPATH.'invoice/'."Let's Sunday#".$this->uri->segment(4).".pdf";
if(!empty($filePath) && file_exists($filePath)){
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=" .$filePath);
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Description: File Transfer");
header("Content-Length: " . filesize($filePath));
flush();
$fp = fopen($filePath, "r");
while (!feof($fp))
{
echo fread($fp, 65536);
flush();
}
fclose($fp); }else{echo "file does not exist";}
答案 0 :(得分:1)
仅将columnData
中的名称更改为文件名而不是完整路径
答案 1 :(得分:0)
以下是CodeIgniter应用程序中的下载部分:
if (file_exists($filePath)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($filePath).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($filePath));
readfile($filePath);
flush();
exit;
}
不同之处在于标题的排序(可能无关紧要),包含expires和pragma标头,以及Content-Disposition
使用完整的基本名称。
该PDF文件名的命名约定可能会导致问题......还有其他问题需要测试。