尝试通过PHP通过XML请求下载图像文件


Trying to download imagefile through XML request via PHP

解决这个问题已经有一段时间了。我试图通过javascript和PHP强制下载文件。

如果我直接访问PHP页面,它会起作用,但我希望在不同的页面上开始下载,但没有成功。

文件的URL取决于从SELECT项中获取的值,但是这一部分按预期工作,所以我不考虑它。

Javascript

var xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET", postUrl, true); //postUrl = http://www.example.com/downloadFile.php?url=http://www.example.com/files/test.eps
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttp.send();

PHP

$url = "http://www.example.com/files/test.eps";
$filesize= strlen(file_get_contents($url));
        header('Content-Description: File Transfer');
        header('Content-Type: application/force-download');
        header('Content-Disposition: attachment; filename='.basename($url));
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        header('Content-Length: ' . $filesize);
        readfile($url);

我一直在测试GET和POST(不确定哪一个最好,请随时纠正我),但现在我正在努力让GET发挥作用。就像我说的,如果我访问"http://www.example.com/downloadFile.php"直接下载文件,如果我执行console.log(xmlHttp.responseText),文件内容会写入控制台,但当从另一个页面发出请求时,文件不会下载。

如有任何帮助,我们将不胜感激。

原来我使用了@Vivasaayi发布的链接,但我做了一点改动。我没有使用Iframe,而是使用了一个常规的a href。PHP文件保持不变。

Javascript

var downloadLinkID = 'hiddenDownloadLink', downloadHref = document.getElementById(downloadLinkID);
    if (downloadHref === null) 
    {
        downloadHref = document.createElement('a');
        downloadHref.id = downloadLinkID;
        downloadHref.setAttribute('href', postUrl + params);
        downloadHref.setAttribute('onclick', firefoxDownload(postUrl + params)); // FF/IE must have onclick event to make link clickable
        downloadHref.click();
    }
    function firefoxDownload(url)
    {
        window.location.href = url; //Needed for FF/IE to force download of file
    }