OK,可能從標題還看不來問題。
簡單來說。就是做
header('Content-Disposition: inline; filename="test.pdf"');
但沒作用的問題。
不過這是在有條件的情況下就是了。
其實我的程式碼如下
$this->load->library('s3');
$file = 'download/' . $getFileData;
$getFile = $this->s3->getFile($file);
if ($fileinfo['extension'] == 'pdf') {
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="' . ($mask ? $mask : basename($file)) . '"');
header('Content-Transfer-Encoding: binary');
header('Accept-Ranges: bytes');
} else {
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . ($mask ? $mask : basename($file)) . '"');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
}
readfile($this->s3->s3Url . "/" . $file, 'rb');
//echo $getFile['Body'];
或許有人看出來了,其實我是讀取S3的東西。
原來的寫法是直接送出Body內容的。
如果是非PDF的情況下,直接下載檔案是可以正確的讀到我指定的 filename 名稱。
但問題就出在因為PDF並不想要直接下載,而是變成預覽。
但在預覽的情況下,它會解析成檔名是 index.php 。無法正確的讀入我設定的 filename
要先說明,其實如果不讀取S3的檔案,而是讀取本機內的檔案。在PDF的預覽畫面下,是可以出現我指定的名字。
我網路上查到的資料都是針對下載的。
雖然要找到幾個也是針對PDF預覽的名稱。但都不是我要的。
想問問廣大的大哥們,看看是否有人曾經有碰過這類似的問題。給我你們的經驗吧!!!
我用下列程式碼測試
//index.php
$file = 'document.pdf'; //實體檔案
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="aaa.pdf"');
header('Content-Transfer-Encoding: binary');
header('Accept-Ranges: bytes');
readfile($file, 'rb');
目前我偏向這是瀏覽器的問題
如果很在意 title 的話
可以用全畫面的 iframe 來讀 pdf
這樣外層的 html 就可以設定 title 了