项目中用到一个HTML5上传功能,带进度条实现。
进度条需要获取上传中状态,需要布在环境中才能实现。
以下代码开发用的环境为PHP,在JAVA下应该可以直接运行。可以试下,
代码没有多麻烦。
纯属个人记录,请勿喷。
@baukh20140625:优化了验证文件类型。
/* @baukh 上传功能 基于jquery,html5 @baukh20140625:优化了验证文件类型 */ //全局变量 var NOWlOADING, //正在上传的文件进度条区域【file_plan】 XMLHTTP; //XMLHttpRequest实例化对象 var Au_upload = { /* $arg.updataArea :上传区域 $arg.updata_main :上传事件区域 $arg.upFile_hide :上传文件隐藏事件 $arg.upFile_show :上传文件伪事件【模拟生成事件,调用隐藏的功能,用于处理样式问题】 $arg.updata_list :上传文件队例 $arg.upadat_tip :上传提示文字 $arg.file_plan :上传进度条 $arg.file_name :上传文件名 $arg.file_action :上传中或已上传文件的删除操作 $arg.fileClass :允许上传的文件类型 $arg.fileMaxSize :允许上传的文件最大值 $arg.allowVoid :是否允许为空 $arg.updataUrl :文件上传地址 $arg.delFileUrl :删除已上传文件地址 */ init: function(pre){ if(!pre){ var pre = {}; } var arg = { updataArea : pre.updataArea || '.updataArea', updata_main : pre.updata_main || '.updata_main', upFile_hide : pre.upFile_hide || '.upFile_hide', upFile_show : pre.upFile_show || '.upFile_show', updata_list : pre.updata_list || '.updata_list', upadat_tip : pre.upadat_tip || '.upadat_tip', file_plan : pre.file_plan || '.file_plan', file_name : pre.file_name || '.file_name', file_action : pre.file_action || '.file_action', fileClass : pre.fileClass || ['dwg','pdf','doc','docx','ppt','pptx','jpg','png','bmp','gif','rar','zip','giz','txt','et','dps','wps','xls','xlsx','accdb','pub','swf'], fileMaxSize : pre.fileMaxSize || 2 * 1024 * 1024, allowVoid : pre.allowVoid || false, uploadUrl : pre.uploadUrl || APP+'/Custom/addFile', delFileUrl : pre.delFileUrl || APP+'/Custom/delFile', } if(!Au_upload.bind_Source(arg)){ console.log('%cbind_Source:在绑定上传事件时,失败','color:#f00'); } if(!Au_upload.bind_DelFile(arg)){ console.log('%cbind_DelFile:在绑定删除文件事件时,失败','color:#f00'); } } /* @bind_Source:触发源头绑定事件 //视觉展现的是伪上传按钮,真实的上传按纽处于隐藏状态 */ ,bind_Source: function(arg){ var updataArea = $(arg.updataArea); if(!updataArea || updataArea.length == 0){ console.log('未找到有效的上传区域,程序已终止'); return false; } //绑定打开选择文件框 var upFile_show = updataArea.find(arg.upFile_show); upFile_show.die('click'); upFile_show.live('click',function(){ var _this = $(this); var _this_upFile_hide = _this.parent().find(arg.upFile_hide); _this_upFile_hide.click(); }); //绑定文件上传隐藏域的值变更事件 var upFile_hide = updataArea.find(arg.upFile_hide); upFile_hide.die('change'); upFile_hide.live('change',function(){ Au_upload.addFile(arg,$(this)); }); return true; } /* @addFile:增加上传文件 */ ,addFile: function(arg,upFileSource){ var _upFileSource = $(upFileSource); //文件DOM var oFile = upFileSource.get(0).files[0]; //获取文件 var fileName = _upFileSource.val(); //文件名 var fileSplit = fileName.split('.'); //分割文件名,产生数组 var fileType = fileSplit[fileSplit.length - 1]; //文件名后缀 // 对文件类型进行验证【采用后缀而不去使用通过文件获取的type】 if(arg.fileClass.length > 0){ //如果后缀数组为空的时候,将不再进行后缀验证 var TypeIsRight = $.inArray(fileType,arg.fileClass); if(TypeIsRight == -1){ alert('您当前选择的文件类型不允许上传'); return false; } } //文件为空验证,arg.allowVoid配置是否允许上传文件为空 if (!arg.allowVoid && oFile.size == 0) { alert('文件为空,请重新选择'); return false; } // 对文件大小进行验证 if (oFile.size > arg.fileMaxSize) { alert('您当前选择的文件过大'); return false; } var _form = _upFileSource.parents('form'); Au_upload._filePost(arg,_form,oFile); } /* @_filePost:实例化上传 */ ,_filePost: function(arg,f,oFile){ NOWlOADING = $('.newLoading'); if(NOWlOADING.length != 0){ alert('当前已存在一个上传中的文件'); return false; } var _form = $(f); var updata_list = _form.parents(arg.updataArea).find(arg.updata_list).find('ul'); //通过事件源进行反查找,针对于处理单页面中多个上传元素 var tmpHtml = '<li class="newLoading hide">' + '<span class="file_name">' + oFile.name + '</span>' + '<div class="file_plan"><span class="fp_slider" style="width:0%;"></span></div>' + '<span class="file_action cancelFile">取消上传</span>' + '</li>'; updata_list.append(tmpHtml); var siv = window.setInterval(function(){ NOWlOADING = $('.newLoading'); if(NOWlOADING.length > 1){ alert('上传失败,请重试'); return false; } if(NOWlOADING.length == 1){ window.clearInterval(siv); var vFD = new FormData(_form.get(0)); // 创建XMLHttpRequest对象,添加一些事件侦听器,发送数据 XMLHTTP = new XMLHttpRequest(); XMLHTTP.upload.addEventListener('progress', Au_upload._fileProgress, false); XMLHTTP.addEventListener('load', Au_upload._fileLoad, false); XMLHTTP.addEventListener('error', Au_upload._fileError, false); XMLHTTP.addEventListener('abort', Au_upload._fileAbort, false); XMLHTTP.open('POST', arg.uploadUrl); XMLHTTP.send(vFD); var cancelFile = NOWlOADING.find('.'+arg.cancelFile); cancelFile.unbind('click'); cancelFile.click(function(){ XMLHTTP.abort(); }); } },100) } /* @_fileProgress:文件上传中 //如果不在环境中,无法获得此状态 */ ,_fileProgress: function(e){ NOWlOADING = $('.newLoading'); var _slider = NOWlOADING.find('.fp_slider'); /* 该方法存在错误现像,暂时未使用 另在文件上传前已经过验证是否为空, if (!e.lengthComputable) { alert('这是一个空文件,请重新选择'); NOWlOADING.remove(); return false; } */ if(NOWlOADING.hasClass('hide')){ NOWlOADING.fadeIn(500); NOWlOADING.remove('hide'); } iBytesUploaded = e.loaded; iBytesTotal = e.total; var iPercentComplete = Math.round(e.loaded * 100 / e.total); //操作上传进度条 _slider.stop(); _slider.animate({ width:iPercentComplete+'%' },500); var iBytesTransfered = Au_upload.bytesToSize(iBytesUploaded); console.log('上传中..'+iBytesTransfered +'/'+iBytesTotal +'='+iPercentComplete); } /* @bytesToSize:字节转换 */ ,bytesToSize: function (bytes) { var sizes = ['Bytes', 'KB', 'MB']; if (bytes == 0) return 'n/a'; var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024))); return (bytes / Math.pow(1024, i)).toFixed(1) + ' ' + sizes[i]; } /* @_fileLoad:文件上传完毕 */ ,_fileLoad: function(e){ if(NOWlOADING.length != 1){ alert('上传文件失败,请重试'); return false; } //上传成功后,清除上传成功的滑动标识 NOWlOADING.removeClass('newLoading'); var _fileAction = NOWlOADING.find('.cancelFile'); _fileAction.removeClass('cancelFile'); //清除取消标识 _fileAction.text('删除'); _fileAction.unbind('click'); _fileAction.addClass('delFile'); //清除删除标识 var json = jQuery.parseJSON(XMLHTTP.responseText); _fileAction.attr('fileId',json.fileId); //文件上传成功后,等待滑动效果完全结束后,隐藏进度条区域 window.setTimeout(function(){ var _filePlan = NOWlOADING.find('.file_plan'); _filePlan.fadeOut(500); },500); console.log('文件上传完毕'); } /* @_fileError:文件上传失败 */ ,_fileError: function(){ if(NOWlOADING.length == 1){ NOWlOADING.removeClass('newLoading'); NOWlOADING.find('.file_plan').addClass('upload_error'); } console.log('上传失败'); } /* @_fileAbort:文件上传中止 */ ,_fileAbort: function(){ if(!NOWlOADING || NOWlOADING.length == 0){ NOWlOADING = $('.newLoading'); } NOWlOADING.removeClass('newLoading'); NOWlOADING.find('.file_plan').addClass('upload_error'); console.log('上传终止'); } /* @cancelFile:取消正在上传文件 */ ,cancelFile: function(XMLHTTP){ alert('已废弃'); //已废弃 } /* @delFile:删除已上传文件 */ ,bind_DelFile: function(arg){ var updataArea = $(arg.updataArea); var delFile = updataArea.find('.delFile'); delFile.die('click'); delFile.live('click',function(){ var _this = $(this); var fileId = _this.attr('fileId'); if(!fileId){ alert('删除失败,请重试'); console.log('删除失败:未找到有效的文件ID'); return false; } var data = { fileId : fileId } $.post(arg.delFileUrl,data,function(m){ if(m.code != '1'){ alert(m.msg); console.log('删除失败:由服务器删除失败引发'); return false; } var onlyFile = _this.parents('li'); //获取当前删除所在的li节点 onlyFile.fadeOut(500,function(){ //在获得服务器响应后,将节点删除 onlyFile.remove(); }) },'JSON'); }); return true; } }
相关推荐
基于springboot大学生就业信息管理系统源码数据库文档.zip
基于java的驾校收支管理可视化平台的开题报告
时间序列 原木 间隔5秒钟 20241120
毕业设计&课设_基于 Vue 的电影在线预订与管理系统:后台 Java(SSM)代码,为毕业设计项目.zip
基于springboot课件通中小学教学课件共享平台源码数据库文档.zip
基于java的网上购物商城的开题报告
Delphi人脸检测与识别Demo1fdef-main.zip
基于java的咖啡在线销售系统的开题报告
基于java的自助医疗服务系统的开题报告.docx
内容概要:本文档全面介绍了Visual Basic(VB)编程语言的基础知识和高级应用。首先概述了VB的基本特性和开发环境,随后详细讲述了VB的数据类型、变量、运算符、控制结构、数组、过程与函数、变量作用域等内容。接着介绍了窗体设计、控件使用、菜单与工具栏的设计,文件操作、数据库访问等关键知识点。最后讨论了VB的学习方法、发展历史及其在桌面应用、Web应用、数据库应用、游戏开发和自动化脚本编写等领域的广泛应用前景。 适合人群:初学者和中级程序员,尤其是希望快速掌握Windows桌面应用开发的人群。 使用场景及目标:①掌握VB的基础语法和开发环境;②学会使用VB创建复杂的用户界面和功能完整的应用程序;③理解数据库操作、文件管理和网络编程等高级主题。 其他说明:Visual Basic是一种简单易学且功能强大的编程语言,尤其适合用于开发Windows桌面应用。文中不仅覆盖了基础知识,还包括了大量的实用案例和技术细节,帮助读者快速提升编程技能。
基于java的疫情期间高校防控系统开题报告.docx
基于springboot+vue社区老年人帮扶系统源码数据库文档.zip
基于java的超市商品管理系统的开题报告.docx
基于SpringBoot房屋买卖平台源码数据库文档.zip
xdu限通院23微处理器系统与应用大作业(两只老虎),适应于汇编语言keil软件,
<项目介绍> - 新闻类网站系统,基于SSM(Spring、Spring MVC、MyBatis)+MySQL开发,高分成品毕业设计,附带往届论文 - 不懂运行,下载完可以私聊问,可远程教学 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
基于java的学生网上请假系统的开题报告.docx
社会经济繁荣发展的今天,电子商务得到了飞速发展,网上交易越来越彰显出其独特的优越性,在人们的日常生活中,出现了各种类型的交易网站。其中一个就是车辆易主交易网站,它是一个服务于用户买卖二手车辆的交易网站,为用户提供了平等互利、方便快捷的网上交易平台,通过这一类型的网站,用户可自由出售和购买车辆。 本课题主要根据车辆本身的特性,充分发挥互联网的特点与优势,构建一个以二手车辆为商品、基于互联网平台的车辆易主业务交易管理系统,并根据车辆易主业务交易管理系统的应用需求,进行需求分析,进而对网站系统作规划设计。采用IDEA为运行平台,以SSH为框架,运用HTML语言、JSP技术、MySql数据库、JSP与后台数据库链接等关键技术建设二手车网上交易系统,构建车辆易主交易系统的会员注册与登录,网站首页展示、用户发布商品车辆,用户求购商品车辆,分页浏览、购物系统、用户后台管理、管理员用户后台管理等功能,并使这些功能得以实现并更好为用户服务。网站整体构建完成且测试成功后,用户可以进入网站进行注册、登录,登录后,用户可以在网站上发布自己的闲置车辆或者寻找想要购买的车辆,还可以收藏车辆,管理发布和收藏的车辆,
SQLite3的向量扩展库,windows dll,版本0.1.5
基于C++实现(控制台)商品库存管理系统