使用jQuery下载文件

如何在点击链接时提示用户下载。

例如,而不是:

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

我可以使用:

 <a href="#">Download Here</a> $('a').click... //Some jquery to download the file 

这样,Google就不会为我的HREF和私人文件build立索引。

这可以用jQuery来完成,如果是的话,怎么样? 或者应该用PHP或者其他方法来完成?

我可能会build议,作为一个更优雅的降解解决scheme,使用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,至less这样用户会得到一些反馈。

如果您不希望search引擎索引某些文件,可以使用robots.txt来告诉networking蜘蛛不要访问您网站的某些部分。

如果您只依赖于JavaScript,那么一些没有它的用​​户将无法点击您的链接。

这里有一个很好的文章,显示了从search引擎隐藏文件的许多方法:

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

JavaScript不是索引页面的好方法; 它不会阻止用户直接链接到您的文件(从而将其显示给抓取工具),正如Rob提到的那样,并不适用于所有用户。
一个简单的解决方法是添加rel="nofollow"属性,但是,如果没有robots.txt,它也是不完整的。

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

是的,您将不得不将window.location.href更改为您要下载的文件的URL。

 window.location.href = 'http://www.com/path/to/file'; 
  var link=document.createElement('a'); document.body.appendChild(link); link.href=url; link.click(); 

通过说明window.location.href = 'uploads/file.doc'; 您将显示您存储文件的位置。 您当然可以使用.htacess强制存储文件所需的行为,但这可能并不总是less数….

最好是创build一个服务器端的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';打开这个php文件window.location.href = 'scripts/this_php_file.php?f=downloaded_file';

隐藏的iframe可以提供帮助

我build议你使用mousedown事件,它被称为BEFORE点击事件。 那样的话,浏览器自然会处理点击事件,这样就避免了任何代码的怪异现象:

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

在这里看到类似的使用jQuery来清除表单的post:使用jQuery 重置多级表单

你也可能会遇到一个问题,那就是struts值栈被重新填充。 换句话说,你提交你的表单,在动作类中做任何事情,但是不要在动作类中清除相关的字段值。 在这种情况下,表单会显示为您以前提交的值。 如果以某种方式坚持这些,只要在返回SUCCESS之前,在操作类中保留每个字段值。

  • 使用jQuery函数

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