使用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引擎隐藏文件的许多方法:
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');