一直在努力解决这个问题。 我试图通过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)
,文件内容会被写入控制台,但是在向其他人发出请求时不会下载文件页。
非常感谢任何帮助。
答案 0 :(得分:1)
原来我使用了@Vivasaayi发布的链接,但是我做了一点点扭曲。而不是使用iframe我使用常规的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
}