实现多文件上传的例子

转至元数据起始

通过页面实现多文件上传,并有进度条控制的例子,步骤参考如下(代码中涉及的几个按钮图片参见附件)

1:页面端实现多文件上传

?
<%@ page language= "java" contentType= "text/html; charset=UTF-8"
     pageEncoding= "UTF-8" session= "false" %>
     
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "<a href="http://www.w3.org/TR/html4/loose.dtd" "="">http://www.w3.org/TR/html4/loose.dtd" >
<html>
 
<head>
<title>上传</title>
     <meta http-equiv= "content-type" content= "text/html; charset=UTF-8" />
     <script src= "<%= request.getContextPath() %>/common/nui/nui.js" type= "text/javascript" ></script>
     <link href= "<%=request.getContextPath()%>/FuJian/style/YangShi.css" rel= "stylesheet" type= "text/css" />
     <%
     String Bizid = request.getParameter( "BizID" );
     String Typeid = request.getParameter( "typeid" );
     String ID = request.getParameter( "ID" );
     String Filetitle = request.getParameter( "Filetitle" );
     %>
</head>
<body>
     <form action= "<%=request.getContextPath()%>/FuJian_CunRu.jsp?BizID=<%=Bizid%>&Typeid=<%=Typeid%>&ID=<%=ID%>&Filetitle=<%=Filetitle%>"
         method= "post" enctype= "multipart/form-data" onsubmit= "return TiJiao()" >
         <span style= 'color:red;' >提示:单个文件最大上传为50MB,超出会红色提示,建议压缩后上传!</span>
         <div class = "fileInputContainer" >
             <input type= "file" id= "WenJian" class = "fileupload" name= "Fdata" onchange= "XuanZhong()" multiple= "multiple" />
             <input type= "button" value= "" class = "quxiao" onClick= "QuXiao()" />
             <input type= "submit" value= "" class = "shangchuan" />
         </div>
         <div id= "JinDu" class = "progressbar" >
             <div id= "ZouDong" class = "progressbar-percent" ></div>
             <div class = "progressbar-label" ><span id= "JinduTiao" style= 'color:red;' ></span></div>
         </div>
         <div id= "QWenJian" >
             <table id= "SuoYouWJ" bordercolor= "#AFD1EB" cellpadding= '0' cellspacing= '0' align= 'center' border= '1px' width= '100%' >
                 <tbody id= "tbody" >
                     <tr align= "center" >
                         <td width= "45%" >文件名</td>
                         <td width= "7%" >类型</td>
                         <td width= "38%" >提示</td>
                     </tr>    
                 </tbody>
             </table>
         </div>
     </form>
     
     <script type= "text/javascript" >
         nui.parse();
         
         //加载
         $(function(){
             $( "#QWenJian" ).hide();
         });
         
         //返回值
         var XinXi = "<%=request.getParameter(" FanHuiZhi ") %>" ;
         if (XinXi != "null" ){
             document.getElementById( 'ZouDong' ).style.width = "100%" ;
             document.getElementById( 'JinduTiao' ).innerHTML = "进度100%" ;
             nui.alert(XinXi, "系统提示" ,function(){
                 CloseWindow();
             });
         } else {
             $( "#JinDu" ).hide();
         }
         
         //定义文件大小
         var DaXiao = 50 * 1024 * 1024 ;
         //选中的文件
         function XuanZhong(){
             //保留Table第一行删除剩下所有
             $( "table tbody tr" ).eq( 0 ).nextAll().remove();
             $( "#QWenJian" ).show();
             //获取多文件上传的所有文件名
             var SuoYouWenJian = document.getElementById( "WenJian" ).files;
             for (var i= 0 ;i<SuoYouWenJian.length;i++){
                 var WenJianQuanMing = SuoYouWenJian[i].name;
                 //截取文件名
                 var WenJianMing = WenJianQuanMing.substring( 0 ,WenJianQuanMing.indexOf( "." ));
                 //截取文件类型转换成小写
                 var WenJianLeiXing = WenJianQuanMing.substring(WenJianQuanMing.indexOf( "." )).toLowerCase();
                 //文件大小
                 var WenJianDaXiao = SuoYouWenJian[i].size;
                 if (parseInt(WenJianDaXiao) > parseInt(DaXiao)){
                     WenJianTiSHi = "文件过大,建议压缩后再上传!" ;
                 } else if (parseInt(WenJianDaXiao) == 0 ){
                     WenJianTiSHi = "文件内容为空,请核对后再上传!" ;
                 } else if (WenJianLeiXing == ".exe" || WenJianLeiXing == ".java" || WenJianLeiXing == ".mp4" ){
                     WenJianTiSHi = "此类型格式不支持上传!" ;
                 } else {
                     WenJianTiSHi = "文件符合!" ;
                 }
                 
                 //把输入的值传到列表里
                 var MingTxt = document.createTextNode(WenJianMing);
                 var LeiXingTxt = document.createTextNode(WenJianLeiXing);
                 var TiShiTxt = document.createTextNode(WenJianTiSHi);
                 
                 //td是表中的列 tr是表中的行
                 var WJMing = document.createElement( "td" );
                 var WJLeiXing = document.createElement( "td" );
                 var TiShi = document.createElement( "td" );
                 if (parseInt(WenJianDaXiao) > parseInt(DaXiao) || parseInt(WenJianDaXiao) == 0 ){
                     TiShi.style.color = "#FF0000" ;
                 } else if (WenJianLeiXing == ".exe" || WenJianLeiXing == ".java" || WenJianLeiXing == ".mp4" ){
                     TiShi.style.color = "#FF0000" ;
                 } else {
                     TiShi.style.color = "#00FF00" ;
                 }  
                 
                 //td的标签体 -->td对象
                 WJMing.appendChild(MingTxt);
                 WJLeiXing.appendChild(LeiXingTxt);
                 TiShi.appendChild(TiShiTxt);
                 
                 //创建tr对象行
                 var HangTr = document.createElement( "tr" );
                     //td对象 -->tr对象
                     HangTr.appendChild(WJMing);
                     HangTr.appendChild(WJLeiXing);
                     HangTr.appendChild(TiShi);
             
                 //tr对象 --> tbody对象
                 document.getElementById( "tbody" ).appendChild(HangTr);
             }
         }
         
         var DianJi = 0 ;
         //上传时候验证
         function TiJiao(){
             if (DianJi == 0 ){
                 DianJi = 1 ;
                 var SYWenJian = document.getElementById( "WenJian" ).files;
                 if (SYWenJian.length < 1 ){
                     nui.alert( "请选择一条文件后,再上传!" , "系统提示" );
                     return false ;
                 } else if (SYWenJian.length > 5 ){
                     nui.alert( "上传文件最多每次5条信息!" , "系统提示" );
                     return false ;
                 } else {
                     for (var i= 0 ;i<SYWenJian.length;i++){
                         var FileQuanMing = SYWenJian[i].name;
                         //截取文件类型转换成小写
                         var FileLX = FileQuanMing.substring(FileQuanMing.indexOf( "." )).toLowerCase();
                         if (FileLX == ".exe" || FileLX == ".java" || FileLX == ".mp4" ){
                             nui.alert( "上传的文件中存在类型格式不支持上传,请重新选择后再上传!" , "系统提示" );
                             return false ;
                         }
                         //文件大小
                         var WenJianDaXiao = SYWenJian[i].size;
                         //文件内容为空
                         var KongDaXiao = SYWenJian[i].size;
                         if (parseInt(WenJianDaXiao) > parseInt(DaXiao)){
                             nui.alert( "上传的文件中有过大文件,请重新选择后再上传!" , "系统提示" ,function(){
                                 return false ;
                             });
                         }
                         if (parseInt(KongDaXiao) == 0 ){
                             nui.alert( "上传的文件内容是空,请核对后再上传!" , "系统提示" ,function(){
                                 return false ;
                             });
                         }
                     }
                     $( "#JinDu" ).show();
                     JinDuTiaoXX( 1 );
                 }
             } else {
                 nui.loading( "请勿重复操作,请稍后......" , "系统提示" );
                 return false ;
             }
         }
         
         //进度条
         function JinDuTiaoXX(n){
             if (parseInt(n) == 97 ){
                 return ;
             }
             t = parseInt(n);
             document.getElementById( 'ZouDong' ).style.width = parseInt(t) + "%" ;
             document.getElementById( 'JinduTiao' ).innerHTML= "进度" + parseInt(t) + "%" ;
             setTimeout( "JinDuTiaoXX(parseInt(t)+1)" , 800 );
         }
         
         //获取子页面信息
         function GetData(){
             if (XinXi == "上传成功!" ){
                 return true ;
             } else {
                 return false ;
             }
         }
         
         //关闭子窗口,刷新父窗体
         function CloseWindow(action){
             if (window.CloseOwnerWindow)
                 return window.CloseOwnerWindow(action);
             else
                 window.close();
         }
         
         //点击取消按钮
         function QuXiao(e){
             CloseWindow( "cancel" );
         }
     </script>
</body>
</html>

 

2:文件上传要用到的css

?
.fileInputContainer{
     background:url(../style/youlan.png) no-repeat;
}
.fileupload{
     width:350px;
     height:27px;
     right: 0 ;
     top: 0 ;
     opacity: 0 ;
     filter:alpha(opacity= 0 );
     cursor:pointer;
}
.shangchuan{
     background:url(../style/shangchuan.png);
     width:62px;
     height:26px;
     border: 0 ;
     padding: 0 ;
     float :right;
     margin-right:10px;
}
.quxiao{
     background:url(../style/quxiao.png);
     width:62px;
     height:26px;
     border: 0 ;
     padding: 0 ;
     float :right;
     margin-right:10px;
}
.yichu{
     width:62px;
     height:26px;
     border: 0 ;
     padding: 0 ;
     background:url(../style/yichu.png);
}
.progressbar{
     position:relative;
     background:#AAAAAA;
     width: 98 %;
     height:16px;
     overflow:hidden;
}
.progressbar-percent{
     position:absolute;
     height:18px;
     background:#00FF00;
     left: 0 ;top:0px;
     overflow:hidden;
     z-index: 1 ;
}
.progressbar-label{
     position:absolute;
     left: 0 ;
     top: 0 ;
     width: 90 %;
     font-size:13px;
     color:White;
     z-index: 10 ;
     text-align:center;
     height:16px;
     line-height:16px;
}

3:文件上传服务器端程序

?
0 <% @page import = "java.io.File" %>
<% @page import = "java.text.SimpleDateFormat" %>
<% @page language= "java" contentType= "text/html;charset=UTF-8" pageEncoding= "UTF-8" import = "java.util.*,Test.*" %>
<% @page import = "org.apache.commons.fileupload.disk.DiskFileItemFactory" %>
<% @page import = "org.apache.commons.fileupload.servlet.ServletFileUpload" %>
<% @page import = "org.apache.commons.fileupload.FileItem" %>
<% @page import = "java.io.FileInputStream" %>
<% @page import = "java.io.ByteArrayOutputStream" %>
<% @page import = "com.eos.data.datacontext.DataContextManager" %>
<% @page import = "com.eos.data.datacontext.IMUODataContext" %>
<% @page import = "com.eos.data.datacontext.IUserObject" %>
<% @page import = "com.eos.foundation.data.DataObjectUtil" %>
<% @page import = "commonj.sdo.DataObject" %>
<% @page import = "com.eos.engine.component.ILogicComponent" %>
<% @page import = "com.primeton.ext.engine.component.LogicComponentFactory" %>
<% @page import = "java.io.InputStream" %>
<% @page import = "java.io.PrintWriter" %>
<%
     System.out.println( "我进来了....." );
     //定义上传路径
     String BenLuJing = "FuJianCaiLiao\\" + "Upload\\" ;
     boolean isFileUpload = ServletFileUpload.isMultipartContent(request);
     //定义返回值
     String FanHuiZhi = "" ;
     //如果是文件上传类型
     if (isFileUpload){
         //得到文件上传工厂
         DiskFileItemFactory GongChang = new DiskFileItemFactory();
         //处理文件上传核心类
         ServletFileUpload fileUpload = new ServletFileUpload(GongChang); 
         //设置文件上传类的编码格式
         fileUpload.setHeaderEncoding( "UTF-8" );
         // 集合数据:FileItem对象 注意:每一个表单域 对应一个 FileItem对象(封装)
         List<FileItem> fileItemList = fileUpload.parseRequest(request);
         //遍历文件
         for (FileItem item: fileItemList){
             //如果这个文本域是文件类型的
             if (!item.isFormField()){
                 //得到文件名
                 String FileName = item.getName();
                 //去除所有空格
                 String WenJianMing = FileName.replaceAll( " +" , "" );
                 //检查文件后缀格式 ,并转换为小写
                 String FileLeiXing = WenJianMing.substring(WenJianMing.lastIndexOf( "." )).toLowerCase(); 
                 //获取文件大小
                 long WenJianSize = item.getSize();
                 //转换文件大小名称
                 long kb = 1024 ;
                 long mb = kb * 1024 ;
                 long gb = mb * 1024 ;
                 //文件单位
                 String FileSize = "" ;
                 if (WenJianSize >= gb){
                     FileSize = String.format( "%.1fGB" ,( float )WenJianSize/gb);
                 } else if (WenJianSize >= mb) {
                     float f = ( float )WenJianSize/mb;
                     FileSize = String.format(f > 100 ? "%.0fMB" : "%.1fMB" ,f);
                 } else if (WenJianSize >= kb){
                     float f = ( float )WenJianSize/kb;
                     FileSize = String.format(f > 100 ? "%.0fKB" : "%.1fKB" ,f);
                 } else {
                     FileSize = String.format( "%dB" ,WenJianSize);
                 }
                 
                 //得到服务器的根路径
                 String rootPath = request.getRealPath( "\\" );
                 //定义年
                 SimpleDateFormat Nian = new SimpleDateFormat( "yyyy" );
                 //定义年月日
                 SimpleDateFormat NianYueRi = new SimpleDateFormat( "yyyy-MM-dd" );
                 //转换成年份
                 String NianFen = Nian.format( new Date());
                 //转换成年月日
                 String NianYR = NianYueRi.format( new Date());
                 //得到文件的路径
                 String QuanLuJIng = rootPath + BenLuJing + NianFen  + "年\\" + NianYR;
                 //创建文件唯一名称 
                 String UID = UUID.randomUUID().toString();
                 //截取文件名
                 String FileMing = WenJianMing.substring( 0 ,WenJianMing.indexOf( "." ));
                 //拼接一个新的文件名
                 String XinMing =NianFen + "_" + NianYR + "_" + FileMing + "_" + UID + FileLeiXing;
                 //路径
                 File WenJianFile = new File(QuanLuJIng);
                 //如果年文件夹不存在则创建   
                 if (!WenJianFile.exists() && !WenJianFile.isDirectory()){      
                    //创建文件夹
                    WenJianFile.mkdirs(); 
                 }
                 //路径
                 File FileWJ = new File(QuanLuJIng + "\\" +XinMing);
                 
                 //得到用户信息
                 String ShangChuanRen = "" ;
                 IMUODataContext muo = DataContextManager.current().getMUODataContext();
                 if (muo != null ) {
                     IUserObject userobject = muo.getUserObject();
                     if (userobject != null ) {
                         ShangChuanRen = userobject.getUserRealName();
                     }
                 }
                 
                 
                 //引用实体
                 DataObject dataobject = DataObjectUtil.createDataObject( "com.QiYeDuan.FuJianCaiLiao.FuJian.FujianXx" );
                 String Filetitle = request.getParameter( "Filetitle" );
                 //把传过来的filetitle解码
                 String FileTitle = java.net.URLDecoder.decode(Filetitle, "UTF-8" );
                 dataobject.set( "bizid" , request.getParameter( "Bizid" ));
                 dataobject.set( "typeid" , request.getParameter( "Typeid" ));
                 dataobject.set( "filetypeid" , request.getParameter( "ID" ));
                 dataobject.set( "filetitle" , FileTitle);
                 dataobject.set( "filesize" , FileSize);
                 dataobject.set( "fileextension" , FileLeiXing);
                 dataobject.set( "url" , XinMing);
                 dataobject.set( "scr" , ShangChuanRen);
                 dataobject.set( "scrq" , new Date());
                 
                 //调用逻辑构建
                 String componentName = "com.QiYeDuan.FuJianCaiLiao.FuJian" ;
                 String operationName = "add_FuJianXX" ;
                 ILogicComponent logicComponent = LogicComponentFactory.create(componentName);
                 // 逻辑流的输入参数
                 Object[] params = new Object[ 1 ];
                 params[ 0 ] = dataobject;
                 Object[] result = null ;
                 result = logicComponent.invoke(operationName, params);
                 //存入文件
                 item.write(FileWJ);
             } else {
                 FanHuiZhi  = "要长传的路径出现错误,请重新上传!" ;
             }
         }
         FanHuiZhi  = "上传成功!" ;
     } else {
         FanHuiZhi  = "长传错误!" ;
     }
     //PrintWriter XinXi = response.getWriter();
     //XinXi.write("<script src=\"/default/common/nui/nui.js\" type=\"text/javascript\"></script><script type=\"text/javascript\">nui.parse();$(function(){location.assign(\""+request.getContextPath()+"/FuJian/ShangChuan_Files.jsp?FanHuiZhi="+FanHuiZhi+"\");});</script>");
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "<a href="http://www.w3.org/TR/html4/loose.dtd" "="">http://www.w3.org/TR/html4/loose.dtd" >
<html>
 
<head>
<title>图片</title>
     <meta http-equiv= "content-type" content= "text/html; charset=UTF-8" />
     <script src= "<%= request.getContextPath() %>/common/nui/nui.js" type= "text/javascript" ></script>
</head>
<body>
 
     <script type= "text/javascript" >
         nui.parse();
         
         nui.alert( "<%=FanHuiZhi %>" , "系统提示" ,function(o){
             //关闭窗口
             window.close();
         });
     </script>
</body>
</html>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值