據我知道你不能把一個直接鏈接到下的「應用程序」導演放在一個文件(由於安全問題,因爲你已經寫了),可能的解決方案,這樣一個是製作一個讀取文件內容並將其返回給響應對象的動作。
當用戶單擊此操作的鏈接時,用戶會看到一個窗口來打開/保存提供的文件。
例子:
public function exampleAction() {
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);
/* ... */
$file = "FILENAME WITH_PATH";
$response = $this->getResponse();
$response->setHeader('Cache-Control', 'public', true);
$response->setHeader('Content-Description', 'public', true);
$response->setHeader('Content-Disposition', 'attachment; filename=' . FILENAME, true);
$response->setHeader('Content-Type', FILETYPE, true);
$response->setHeader('Content-Transfer-Encoding', 'binary', true);
$response->setHeader('Content-Length', filesize($file), true);
$response->setBody(file_get_contents($file));
}
我把上面的代碼中的一些常數,因爲它的價值取決於你的應用。
我可以隱藏打開/保存對話框嗎?即只顯示文件,因爲我可以在直接的PHP非MVC應用程序? – Ephraim 2011-12-23 10:04:33
我不完全明白你想達到什麼 - 你能解釋一下嗎?你想在網頁上顯示PDF文件的內容嗎?我以爲你想創建一個可以由用戶下載的文件鏈接。 – 2011-12-23 11:43:36
前者正確。 Firefox打開一個對話框,爲我提供了打開或保存的選項。我不希望使用對話框,並且在沒有對話框的情況下在Acrobat中打開PDF。與內容類型有關我嘗試過'application/pdf',但它不起作用。艾米的想法TIA。 – Ephraim 2011-12-27 21:42:23