2009-08-18 146 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');