前几日搞的下载模块,写了一中比较轻松的下载方法(弊端较多,慎用),分享一下
大致思路就是:
页面一个下载链接(再不知道下载文件类型的情况下)--------------------->>点击下载---------(通过ajax判断下载类型)----------->下载成功
注意:下载文件命名要与链接一直,否则无法识别
下面为部分代码:
逻辑思路:1、先获取每个类型的链接id
2、在ajax中判断(若是需要的下载的类型flag=1,不是count++,id查找结束后,判断count与flag的值,注意:ajax设置为同步加载)
3、打开下载链接
<script type="text/javascript">
var url;
var flag = 0;
var count = 0;
var urldown = null;
function urlIsTrue(){
$("a[id^='id_'").each(function(){
var id = $(this).attr('id');
url = document.getElementById(id);
$.ajax({
url:url,
async:false,
type:'HEAD',
error: function() {
count ++;
},
success: function() {
flag = 1;
urldown = url;
}
});
});
if(flag == 1){
window.open(urldown);
}else if(count>-1){
alert("暂无下载文件");
}
}
</script><span style="font-family: Arial, Helvetica, sans-serif;"> </span>
设置需要下载的文件类型:
<div align="right" id="group">
<a id="id_1" href="<%=path %>/download/${commonMsgModel.title}.doc" style="display: none"/>
<a id="id_2" href="<%=path %>/download/${commonMsgModel.title}.jpg" style="display: none"/>
<a id="id_3" href="<%=path %>/download/${commonMsgModel.title}.zip" style="display: none"/>
<a id="id_4" href="<%=path %>/download/${commonMsgModel.title}.rar" style="display: none"/>
<a id="id_5" href="<%=path %>/download/${commonMsgModel.title}.png" style="display: none"/>
<a id="id_6" href="<%=path %>/download/${commonMsgModel.title}.pdf" style="display: none"/>
<a id="id_7" href="<%=path %>/download/${commonMsgModel.title}.xls" style="display: none"/>
<a id="download" href="javascript:void(0);" οnclick="urlIsTrue()" class="css_btn_class" style="margin-right: 30px">下载附件</a></div>
</div>
方法实现简单,但是缺点很多。例如在ajax中判断时会多次循环,原因是查找每个id所致,并且这种方式对页面的消耗也过大,所以不建议采用,若是仅仅是一两种,并且是简单的下载(无需经过后台处理)可使用这种方式。
需要下载文件建议还是通过后台处理,或是将路径放置在文件或数据库中,这样可以保证页面安全,并且对展现页面效率也有提高。
转载请注明地址