Scarica file usando jQuery

Come posso richiedere un download per un utente quando fa clic su un collegamento.

Ad esempio, invece di:

Download Here 

Potrei usare:

 Download Here $('a').click... //Some jquery to download the file 

In questo modo, Google non indicizza i miei file HREF e privati.

Questo può essere fatto con jQuery, se sì, come? O dovrebbe essere fatto con PHP o qualcosa invece?

Potrei suggerire questo, come soluzione più degradante, usando preventDefault :

 $('a').click(function(e) { e.preventDefault(); //stop the browser from following window.location.href = 'https://stackoverflow.com/questions/1296085/download-file-using-jquery/uploads/file.doc'; }); Download now! 

Anche se non c’è Javascript, almeno in questo modo l’utente riceverà un feedback.

Se non vuoi che i motori di ricerca indicizzino determinati file, puoi utilizzare robots.txt per dire ai web spider di non accedere ad alcune parti del tuo sito web.

Se ti affidi solo su javascript, alcuni utenti che navigano senza di esso non potranno fare clic sui tuoi link.

Ecco un bell’articolo che mostra molti modi per hide i file dai motori di ricerca:

http://antezeta.com/news/avoid-search-engine-indexing

JavaScript non è un buon modo per non indicizzare una pagina; non impedirà agli utenti di collegarsi direttamente ai tuoi file (e quindi di rivelarli ai crawler) e, come detto da Rob, non funzionerebbe per tutti gli utenti.
Una soluzione semplice consiste nell’aggiungere l’ rel="nofollow" , sebbene, ancora una volta, non sia completo senza robots.txt.

 Download Here 

Sì, dovresti modificare window.location.href nell’URL del file che vorresti scaricare.

 window.location.href = 'http://www.com/path/to/file'; 

Affermando window.location.href = 'https://stackoverflow.com/questions/1296085/download-file-using-jquery/uploads/file.doc'; mostri dove immagazzini i tuoi file. Ovviamente potresti usare .htacess per forzare il comportamento richiesto per i file memorizzati, ma questo potrebbe non essere sempre maneggevole …

È meglio creare un file php lato server e inserire questo contenuto in esso:

 header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename='.$_REQUEST['f']); readfile('../some_folder/some_subfolder/'.$_REQUEST['f']); exit; 

Questo codice restituirà QUALSIASI file come download senza mostrare dove lo si archivia effettivamente.

Si apre questo file php tramite window.location.href = 'scripts/this_php_file.php?f=downloaded_file';

  var link=document.createElement('a'); document.body.appendChild(link); link.href=url; link.click(); 

Gli iframe nascosti possono aiutare

Ti suggerisco di utilizzare l’evento mouse, che è chiamato PRIMA dell’evento click. In questo modo, il browser gestisce l’evento click in modo naturale, evitando qualsiasi stranezza del codice:

 (function ($) { // with this solution, the browser handles the download link naturally (tested in chrome and firefox) $(document).ready(function () { var url = '/private/downloads/myfile123.pdf'; $("a").on('mousedown', function () { $(this).attr("href", url); }); }); })(jQuery); 
  • Usando la funzione jQuery

      var valFileDownloadPath = 'http//:'+'your url'; window.open(valFileDownloadPath , '_blank'); 

Vedi qui per un post simile sull’utilizzo di jQuery per cancellare i moduli: Reimpostazione di un modulo a più stadi con jQuery

È inoltre ansible che si verifichi un problema in cui i valori vengono ripopolati dallo stack di valori struts. In altre parole, si invia il modulo, si esegue qualsiasi cosa nella class di azione, ma non si cancellano i relativi valori di campo nella class azione. In questo scenario sembra che il modulo mantenga i valori che hai precedentemente inviato. Se stai persistendo in qualche modo, basta nullare ogni valore di campo nella class azione dopo aver persistito e prima di restituire SUCCESSO.