Force загружает pdf-ссылку, используя javascript/ajax/jquery
предположим, что у нас есть ссылка в формате pdf http://manuals.info.apple.com/en/iphone_user_guide.pdf" (например, чтобы вы знали, что файл отсутствует на моем сервере, у меня есть только ссылка)... теперь я должен предоставить кнопку на моем сайте, которая будет загружать файл.
Я пробовал различные вещи, такие как window.open, href и т.д., но он открывает ссылку в другом окне. я знаю, потому что теперь у всех браузеров есть плагин adobe, который открывает его в другом окне, но все равно разве я не предоставляю пользователю возможность загрузки, а не открывать его, используя скрипты на стороне клиента.
помощь plz..
спасибо
Ответы
Ответ 1
Используйте HTML5 атрибут "скачать"
<a href="iphone_user_guide.pdf" download="iPhone User Guide.PDF">click me</a>
Предупреждение: на момент написания статьи не работает в IE/Safari, см.: caniuse.com/#search=download
Изменение: Если вы ищете реальное решение JavaScript, пожалуйста, смотрите Lajarre ответ
Ответ 2
Вот решение Javascript (для таких людей, как я, которые искали ответ на заголовок):
function SaveToDisk(fileURL, fileName) {
// for non-IE
if (!window.ActiveXObject) {
var save = document.createElement('a');
save.href = fileURL;
save.target = '_blank';
save.download = fileName || 'unknown';
var evt = new MouseEvent('click', {
'view': window,
'bubbles': true,
'cancelable': false
});
save.dispatchEvent(evt);
(window.URL || window.webkitURL).revokeObjectURL(save.href);
}
// for IE < 11
else if ( !! window.ActiveXObject && document.execCommand) {
var _window = window.open(fileURL, '_blank');
_window.document.close();
_window.document.execCommand('SaveAs', true, fileName || fileURL)
_window.close();
}
}
источник: http://muaz-khan.blogspot.fr/2012/10/save-files-on-disk-using-javascript-or.html
К сожалению, для меня работает IE11, который не принимает новый MouseEvent. В этом случае я использую следующее:
//...
try {
var evt = new MouseEvent(...);
} catch (e) {
window.open(fileURL, fileName);
}
//...
Ответ 3
С JavaScript очень сложно, если не невозможно (?). Я бы предложил использовать какой-то язык с кодом, например PHP, С# или Java. Если бы вы использовали PHP, вы могли бы на странице, на которую отправляется ваша кнопка, сделать что-то вроде этого:
<?php
header('Content-type: application/pdf');
header('Content-disposition: attachment; filename=filename.pdf');
readfile("http://manuals.info.apple.com/en/iphone_user_guide.pdf");
?>
Это также работает для JS (от http://www.phpbuilder.com/board/showthread.php?t=10149735):
<body>
<script>
function downloadme(x){
myTempWindow = window.open(x,'','left=10000,screenX=10000');
myTempWindow.document.execCommand('SaveAs','null','download.pdf');
myTempWindow.close();
}
</script>
<a href=javascript:downloadme('http://manuals.info.apple.com/en/iphone_user_guide.pdf');>Download this pdf</a>
</body>
Ответ 4
Если htaccess является опцией, это приведет к загрузке всех файлов PDF вместо открытия в браузере.
<FilesMatch "\.(?i:pdf)$">
ForceType application/octet-stream
Header set Content-Disposition attachment
</FilesMatch>
Ответ 5
Вот прекрасный пример загрузки файла с использованием javaScript.
Использование: download_file(fileURL, fileName);
Ответ 6
В javascript используйте метод preventDefault() параметра args события.
<a href="no-script.html">Download now!</a>
$('a').click(function(e) {
e.preventDefault(); // stop the browser from following
window.location.href = 'downloads/file.pdf';
});