2009-08-18 109 views
94

如何在用戶點擊鏈接時提示下載。使用jQuery下載文件

例如,而不是:

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

我可以使用:

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

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

這樣一來,谷歌沒有索引我的HREF的和私人文件。

這可以用jQuery來完成,如果是的話,怎麼辦?或者應該用PHP或其他方法來完成?

+0

[下載文件的可能重複使用Javascript/jQuery](http://stackoverflow.com/questions/3749231/download-file-using-javascript-jquery) – Liam 2016-05-11 10:03:32

回答

135

我可能會建議這一點,作爲一個更優雅降解的解決方案,使用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> 

即使沒有使用Javascript,至少這種方式,用戶將得到一些反饋。

+17

jQuery是**答覆呃。 – voyager 2009-08-18 19:58:37

+0

謝謝,這就是我一直在尋找的。我通常使用「preventDefault」,因爲我很懶,所以就把它放在了上面。 ;-) – Dodinas 2009-08-18 21:38:09

+0

如果可點擊的div或img怎麼辦? – 2012-09-13 03:03:06

11

是的,你將不得不將window.location.href改爲你想下載的文件的url。

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

如果您不希望搜索引擎索引某些文件,則可以使用robots.txt來告訴網絡蜘蛛不要訪問您網站的某些部分。

如果您僅依賴於JavaScript,那麼一些沒有它的用​​戶瀏覽將無法點擊您的鏈接。

+1

很好的瞭解'robots.txt'。謝謝。 – Dodinas 2009-08-18 21:49:09

+0

@Rob,如果你需要的URL是「私人的」,「robots.txt」將無濟於事,因爲它仍然會存儲在瀏覽器歷史記錄和中間服務器中。 – Pacerier 2015-03-03 22:40:29

+1

6年後:沒有javascript的瀏覽器? - 好吧,你也可以去散步。 – 2015-07-29 09:16:07

17

這裏有一個很好的文章,顯示來自搜索引擎的隱藏文件的方法很多:

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

JavaScript是不是一個好辦法不索引頁;它不會阻止用戶直接鏈接到您的文件(並因此將其展示給抓取工具),而且正如Rob所說的,它不適用於所有用戶。
一個簡單的修復方法是添加rel="nofollow"屬性,但是,如果沒有robots.txt,它還不完整。

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

+1對於有用的鏈接,謝謝。 – Dodinas 2009-08-18 21:39:10

+2

[這是另一個針對Webmasers的Google幫助文章](http://www.google.com/support/webmasters/bin/answer.py?hl=de&answer=96569),它可以幫助我理解「nofollow」或「我」rel。 – 000 2011-02-07 19:24:42

3

Hidden iframes可以幫助

+0

var redeemFrame = document.createElement(「iframe」); var src =「doDownload.php」; redeemFrame.setAttribute(「src」,src); redeemFrame.setAttribute(「style」,「display:none」); document.body.appendChild(redeemFrame); – DarthRez 2018-01-06 21:55:27

0

在這裏看到類似的職位上使用jQuery清除表單:Resetting a multi-stage form with jQuery

您也可以運行到其中的值是由支柱值重新填充的問題疊加。換句話說,你提交表單,在動作類中做任何事情,但不要清除動作類中的相關字段值。在這種情況下,表單似乎會保留您之前提交的值。如果以某種方式堅持這些,只需在持續之後並返回SUCCESS之前清空操作類中的每個字段值即可。

5

通過聲明window.location.href = 'uploads/file.doc';您顯示您存儲文件的位置。您當然可以使用.htacess強制保存文件所需的行爲,但這可能並不總是很少。

這是更好地創建一個服務器端的PHP文件並在其中放置該內容:

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

此代碼將返回的任何文件的下載,而不顯示在您實際存儲它。

您通過window.location.href = 'scripts/this_php_file.php?f=downloaded_file';

+0

該解決方案幫助我解決了我的網站上的下載問題,謝謝! – Denniz 2017-12-06 09:12:27

2

打開這個PHP文件,我建議你用鼠標按下事件,這就是所謂的點擊事件之前。 這樣一來,瀏覽器處理click事件自然,避免了任何代碼的怪事:

(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

與jquery相同的東西不起作用。 – 2016-06-23 18:30:19

+0

@ shyammakwana.me你有錯誤? – 2016-06-23 22:49:20

+0

沒有錯誤,只是下載沒有啓動。我認爲在創建元素時可能會缺少一些點。 – 2016-06-24 08:32:05

0
  • 使用jQuery功能

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