2009-08-18 16 views
94

Jak mogę wyświetlić monit o pobranie dla użytkownika po kliknięciu łącza.Pobierz plik przy użyciu jQuery

Na przykład zamiast:

<a href="uploads/file.doc">Download Here</a> 

mogę użyć:

<a href="#">Download Here</a> 

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

ten sposób Google nie indeksuje moje HREF i prywatne pliki.

Czy można to zrobić za pomocą jQuery, jeśli tak, w jaki sposób? Czy powinno to być zrobione za pomocą PHP lub czegoś takiego?

+0

Możliwy duplikat [Pobierz plik za pomocą JavaScript/jQuery] (http://stackoverflow.com/questions/3749231/download-file-using-javascript-jquery) – Liam

Odpowiedz

135

mógłbym zasugerować to, jako bardziej wdzięcznie rozkładających rozwiązania, korzystając preventDefault:

$('a').click(function(e) { 
    e.preventDefault(); //stop the browser from following 
    window.location.href = 'uploads/file.doc'; 
}); 

<a href="no-script.html">Download now!</a> 

Nawet jeśli nie ma JavaScript, przynajmniej w ten sposób użytkownik otrzyma informację zwrotną.

+17

jQuery to ** ** odpowiedź er. – voyager

+0

Dzięki, tego właśnie szukałem. Zwykle używam "preventDefault", zostawiłem to wyżej, ponieważ byłem leniwy. ;-) – Dodinas

+0

co, jeśli klikalny div lub img ??? –

11

Tak, musiałbyś zmienić window.location.href na URL pliku, który chciałbyś pobrać.

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

Jeśli nie chcesz, aby wyszukiwarki indeksowały określone pliki, możesz użyć robots.txt, aby powiedzieć webmasterom, że nie mają dostępu do niektórych części Twojej witryny.

Jeśli polegasz tylko na javascript, niektórzy użytkownicy, którzy przeglądają go bez niego, nie będą mogli kliknąć swoich linków.

+1

Dobrze wiedzieć o pliku "robots.txt". Dziękuję Ci. – Dodinas

+0

@Rob, Jeśli potrzebujesz, aby adresy URL były "prywatne", "robots.txt" nie pomogłoby, ponieważ nadal byłoby przechowywane w historii przeglądarki i serwerach pośredniczących. – Pacerier

+1

6 lat później: przeglądanie bez javascript? - cóż, możesz też pójść na spacer. –

17

Oto ładny artykuł, który pokazuje wiele sposobów ukrywania plików z wyszukiwarek:

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

JavaScript nie jest dobrym sposobem nie indeksować strony; nie uniemożliwi to użytkownikom bezpośredniego łączenia się z Twoimi plikami (i tym samym ujawnienia ich robotom indeksującym), a jak wspomniał Rob, nie będzie działać dla wszystkich użytkowników.
Łatwą poprawką jest dodanie atrybutu rel="nofollow", ale nie jest to kompletne bez pliku robots.txt.

<a href="uploads/file.doc" rel="nofollow">Download Here</a> 
+1

+1 Za pomocne łącze, dzięki. – Dodinas

+2

[Oto kolejny fragment Pomocy Google dla webmasterów] (http://www.google.com/support/webmasters/bin/answer.py?hl=de&answer=96569), który bardzo pomaga mi zrozumieć "nofollow" lub "ja" rel. – 000

3

Hidden iframes może pomóc

+0

var redeemFrame = document.createElement ("iframe"); var src = "doDownload.php"; redeemFrame.setAttribute ("src", src); redeemFrame.setAttribute ("style", "display: none"); document.body.appendChild (redeemFrame); – DarthRez

0

zobaczyć tutaj na podobnym stanowisku na jQuery wyczyścić formy: Resetting a multi-stage form with jQuery

Możesz być również uruchomiony na problem gdzie wartości są odtwarzanym przez wartość struts stos. Innymi słowy, przesyłasz swój formularz, robisz cokolwiek w klasie akcji, ale nie usuwaj powiązanych wartości pól w klasie akcji. W tym scenariuszu formularz wydaje się zachować wartości, które wcześniej przesłałeś. Jeśli utrzymujesz je w jakiś sposób, po prostu zeruj każdą wartość pola w swojej klasie działania, po tym jak będzie się utrzymywać i przed powrotem do SUKCESU.

5

Podając window.location.href = 'uploads/file.doc'; pokazujesz, gdzie przechowujesz swoje pliki. Oczywiście możesz użyć .htacess, aby wymusić wymagane zachowanie dla zapisanych plików, ale nie zawsze może to być garść ....

Lepiej jest stworzyć po stronie serwera php plik i umieścić zawartość w nim:

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

Ten kod zwróci ŻADNYCH plik do pobrania bez pokazywania gdzie właściwie przechowywać go.

otworzyć ten plik php poprzez window.location.href = 'scripts/this_php_file.php?f=downloaded_file';

+0

To rozwiązanie pomogło mi rozwiązać problemy z pobieraniem w mojej witrynie, dzięki! – Denniz

2

Proponuję użyć zdarzenia mouseDown, która jest wywoływana przed zdarzenia click. ten sposób, przeglądarka obsługuje zdarzenie click naturalny, który unika weirdness kodu:

(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); 
5
var link=document.createElement('a'); 
document.body.appendChild(link); 
link.href=url; 
link.click(); 
+0

samo z jquery nie działa. –

+0

@ shyammakwana.me masz błąd? –

+0

brak błędu, samo pobieranie nie zostało uruchomione. Myślę, że być może brakuje jakiegoś punktu podczas tworzenia elementu. –

0
  • pomocą funkcji jQuery

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