Download File Using jQuery
如何在用户单击链接时提示下载。
例如,而不是:
1 | Download Here |
我可以用:
1 2 3 | Download Here $('a').click... //Some jquery to download the file |
这样,Google就不会将我的HREF和私人文件编入索引。
这可以用jQuery完成,如果是这样,怎么样? 或者应该用PHP或其他东西来完成?
我可能会建议使用
1 2 3 4 5 6 | $('a').click(function(e) { e.preventDefault(); //stop the browser from following window.location.href = 'uploads/file.doc'; }); Download now! |
即使没有Javascript,至少这种方式用户也会得到一些反馈。
如果您不希望搜索引擎为某些文件编制索引,您可以使用robots.txt告诉网络蜘蛛不要访问您网站的某些部分。
如果您只依赖于javascript,那么一些没有它的用??户将无法点击您的链接。
这是一篇很好的文章,展示了从搜索引擎隐藏文件的许多方法:
http://antezeta.com/news/avoid-search-engine-indexing
JavaScript不是索引页面的好方法;它不会阻止用户直接链接到您的文件(从而将其显示给抓取工具),正如Rob提到的那样,并不适用于所有用户。
一个简单的解决方法是添加
1 | Download Here |
是的,您必须将window.location.href更改为您要下载的文件的URL。
1 | window.location.href = 'http://www.com/path/to/file'; |
1 2 3 4 | var link=document.createElement('a'); document.body.appendChild(link); link.href=url; link.click(); |
通过声明
最好创建一个服务器端的php文件并将其放入其中:
1 2 3 4 | header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename='.$_REQUEST['f']); readfile('../some_folder/some_subfolder/'.$_REQUEST['f']); exit; |
此代码将返回任何文件作为下载,而不显示您实际存储它的位置。
你通过
-
使用jQuery函数
1
2
3var valFileDownloadPath = 'http//:'+'your url';
window.open(valFileDownloadPath , '_blank');
隐藏的iframe可以提供帮助
我建议你使用mousedown事件,它在click事件之前被调用。
这样,浏览器自然地处理click事件,这避免了任何代码怪异:
1 2 3 4 5 6 7 8 9 10 11 12 13 | (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清除表单的类似帖子,请参阅此处:使用jQuery重置多阶段表单
您可能还遇到了struts值堆栈重新填充值的问题。换句话说,您提交表单,在操作类中执行任何操作,但不清除操作类中的相关字段值。在这种情况下,表单似乎会保留您先前提交的值。如果以某种方式持久化这些,只需在持久化之后并在返回SUCCESS之前使动作类中的每个字段值都为空。