2010-06-19 12 views
21

supponiamo di avere un collegamento pdf "http://manuals.info.apple.com/en/iphone_user_guide.pdf" (solo per esempio e per farti sapere che il file non è sul mio server, ho solo il collegamento) ... ora Devo fornire un pulsante sul mio sito che scaricherà il file.Forza scaricare un collegamento pdf usando javascript/ajax/jquery

ho provato varie cose come i metodi window.open, href etc. ma apre il collegamento su un'altra finestra. lo so perché ora tutto il browser viene fornito con un plugin Adobe che lo apre in un'altra finestra, ma non esiste comunque alcun modo per dare all'utente la possibilità di scaricare piuttosto che aprirlo, tramite script sul lato client ..

plz help .. grazie

+0

Hai controllato questo? http://stackoverflow.com/questions/349067/download-a-file-using-javascript – Fopfong

risposta

19

Usa HTML5 "download" attributo

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

Attenzione: partire da questa scrittura, non funziona in IE/Safari, vedi: caniuse.com/#search=download

Edit: Se siete alla ricerca di un vero e proprio javascript soluzione vedere lajarre's answer

+0

come funziona questo in HTML4? C'è un altro modo per farlo? – Jacques

+0

ciao, ho usato lo stesso codice ma quel codice non funziona in safari potresti suggerirmi qualche buon plugin che ti permetta di forzare il download del file pdf in javascript. –

+0

in base a caniuse http://caniuse.com/#search=download al momento non è supportato in safari. Sto solo supponendo, ma potresti riuscire a usare 'contentType 'di jquery.ajax per raggiungere questo obiettivo. altrimenti, se hai il controllo sul server, puoi dire di inviare il file con un tipo mime binario, ovviamente. – sarink

7

Con JavaScript è molto difficile se non impossibile (?). Suggerirei di utilizzare una sorta di linguaggio code-behind come PHP, C# o Java. Se si sceglie di usare PHP, è possibile, nella pagina i tuoi messaggi pulsanti a, fare qualcosa di simile:

<?php 
header('Content-type: application/pdf'); 
header('Content-disposition: attachment; filename=filename.pdf'); 
readfile("http://manuals.info.apple.com/en/iphone_user_guide.pdf"); 
?> 

Questo sembra anche funzionare per JS (da 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

non funziona. –

30

Ecco una soluzione diJavascript (per la gente come me che erano alla ricerca di una risposta al titolo):

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(); 
    } 
} 

fonte: http://muaz-khan.blogspot.fr/2012/10/save-files-on-disk-using-javascript-or.html

Purtroppo il lavoro per me con IE11, che non accetta nuovi MouseEvent. Io uso il seguente in quel caso:

//... 
try { 
    var evt = new MouseEvent(...); 
} catch (e) { 
    window.open(fileURL, fileName); 
} 
//... 
+1

errore fallito alcun file classe Bugfixer

+0

grazie per il metodo. salva i file come "sconosciuto" L'ho modificato in fileURL lo ho salvato come "http --- localhost-ielts/gtreading-workbook-Activity_3_1.pdf" Qualche idea su come risolverlo? – hijacker83

+0

Grazie! per me funziona. :) –

0

in javascript uso il metodo preventDefault() del parametro args evento.

<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

Se .htaccess è un'opzione questo renderà tutti i link PDF scaricare invece di apertura nel navigatore

<FilesMatch "\.(?i:pdf)$"> 
    ForceType application/octet-stream 
    Header set Content-Disposition attachment 
</FilesMatch> 
Problemi correlati