2010-06-19 2 views
21

предположим, что у нас есть ссылка в формате pdf «http://manuals.info.apple.com/en/iphone_user_guide.pdf» (просто, например, чтобы вы знали, что файл не на моем сервере, у меня есть только ссылка) ... сейчас я должен предоставить кнопку на моем сайте, которая будет загружать файл.Force скачать pdf-ссылку с помощью javascript/ajax/jquery

Я пробовал различные вещи, такие как window.open, href и т. Д. Методы, но он открывает ссылку в другом окне. Я знаю, потому что теперь у всех браузеров есть плагин adobe, который открывает его в другом окне, но, тем не менее, я не предоставляю пользователю возможность скачать, а не открывать его, используя скрипты на стороне клиента.

Помощь plz .. спасибо

+0

Вы проверить это? http://stackoverflow.com/questions/349067/download-a-file-using-javascript – Fopfong

ответ

19

Использование "загрузить" HTML5 атрибут

<a href="iphone_user_guide.pdf" download="iPhone User's Guide.PDF">click me</a> 

Внимание: в этой записи, не работает в IE/Safari, см: caniuse.com/#search=download

Edit: Если вы ищете фактического Javascript решение см lajarre's answer

+0

Как это помогает в HTML4? Есть ли другой способ сделать это? – Jacques

+0

привет, я использовал один и тот же код, но этот код не работает в сафари, не могли бы вы предложить мне хороший плагин, который позволит принудительно загрузить pdf-файл в javascript. –

+0

согласно caniuse http://caniuse.com/#search=download это в настоящее время не поддерживается в сафари. Я просто догадываюсь, но вы можете использовать 'contentType' jquery.ajax для достижения этого. в противном случае, если у вас есть контроль над сервером, вы можете сказать ему отправить файл с двоичным типом mime, конечно. – sarink

7

С JavaScript очень сложно, если не невозможно (?). Я бы предложил использовать какой-то язык с кодом, например PHP, C# или 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> 
+0

он не работает. –

30

Вот решение 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); 
} 
//... 
+1

ошибка не удалось ни одного файла кнопку <класс = "БТН БТН-хз" OnClick = "SaveToDisk (" http://cloudagent-im.s3.amazonaws.com/042015/FaCvns7xSIt1B313.mp3 ", " FaCvns7xSIt1B313.mp3 ") "> Bugfixer

+0

спасибо за метод. сохраняет файлы как «неизвестные» Я изменил его на файлURL, он сохранил его как «http --- localhost-ielts/gtreading-workbook-Activity_3_1.pdf» Любая идея, как его исправить? – hijacker83

+0

Спасибо! меня устраивает. :) –

0

В JavaScript использовать метод preventDefault() параметр аргументов события.

<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'; 
}); 
0

Если Htaccess вариант это сделает все PDF ссылки скачать вместо открытия в браузере

<FilesMatch "\.(?i:pdf)$"> 
    ForceType application/octet-stream 
    Header set Content-Disposition attachment 
</FilesMatch> 
Смежные вопросы