通過Ajax和PHP強制下載



1 Answers

將MIME類型設置為image/jpeg很可能不起作用。 所以,你需要application/octet-stream來強制下載。

將php中的內容類型標題替換為以下內容:

header('Content-Type: application/octet-stream'); 

此外,一個不錯的解決方案,而不是使用document.location是注入一個iframe。 在成功回調中使用以下函數

function downloadFile(url)
    {
        var iframe;
        iframe = document.getElementById("download-container");
        if (iframe === null)
        {
            iframe = document.createElement('iframe');  
            iframe.id = "download-container";
            iframe.style.visibility = 'hidden';
            document.body.appendChild(iframe);
        }
        iframe.src = url;   
    }
Question

我想創建一個允許下載JPG文件的下載文件。 這是我的PHP腳本:

<?php
    header("Pragma: public"); // required
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-Description: File Transfer");
    header("Content-Type: image/jpg");
    header('Content-Disposition: attachment; filename="'.basename($GET['a']).'"');
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".filesize(($GET['a']));
    readfile(($GET['a']);
?>

這是我的js代碼的一段代碼:

function downloadFile(a){
    document.location = "download.php?a="+ a;
}

這個代碼示例沒有任何反應。 如果我將結果追加到HTML標籤中,它將顯示文件的內容。

任何想法如何教瀏覽器下載此文件?

編輯:腳本更新




你的方法是正確的,你需要在你的AJAX回調中不做任何事情。 顯然你錯過了Content-Description: File Transfer標題。 添加它,它會使瀏覽器彈出一個保存文件對話框(或保存到默認位置,取決於您的設置)。




Related