2015-05-13 66 views
2

我是Yii2的新手,如果有人能幫助我解決問題,我會非常感激。我想做一個下載鏈接,我使用Yii2發送文件回覆

Yii::$app->response->sendFile($path, $name, ['inline' => false])->send(); 

在下載功能,但它只是讀取文件的內容,並直接在頁面中顯示。我想要做的是當用戶點擊下載鏈接時,彈出下載對話框或文件將自動下載,而不是顯示內容。誰能幫幫我嗎?

+0

這可能與Yii2完全不相關,但由於您的瀏覽器從未收到過MIME類型或無法識別它。你想發送什麼類型的內容?也許使用螢火蟲或瀏覽器的調試工具來檢查是否正在收到MIME類型 – Blizz

回答

2

我有完全相同的問題。事實證明,我的鏈接下載操作被放置在Pjax::begin() Pjax::end()方法中,因此該文件的內容被視爲該頁面的更新。

我的解決方案:添加data-pjax="0"屬性下載鏈接。

+0

好的工作。我不知道Pjax可能會打擾下載。 – stfsngue

0

你可以做的是使用PHP的頭功能:

public function actionDownload() { 
    $file = $_GET["file"]; 
    $name = str_replace('files/prices/', '', $file); 

    header("Content-Disposition: attachment; filename=\"" . urlencode($name) . "\""); 
    header("Content-Type: application/pdf"); 
    header("Content-Description: File Transfer"); 
    header("Content-Transfer-Encoding: binary"); 
    header("Content-Length: " . filesize($file)); 

    ob_clean(); 
    flush(); 

    readfile($file); 
} 

然後調用這樣的鏈接,與時間戳: http://page.com/download?file=files/prices/sillas.pdf&ts=1490725032

0

相反的:

sendFile(); 

嘗試:

xSendFile()