javascript — попытка загрузить файл изображения через XML-запрос через переполнение стека

Некоторое время боролся с этой проблемой.
Я пытаюсь принудительно загрузить файл через 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) содержимое файла записывается на консоль, но файл не загружается при выполнении запроса с другой страницы.

Любая помощь будет принята с благодарностью.

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

}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]