网站备案法律,2345百度百科,电商哪个平台好做,汽车之家app下载最新版springMVC实现多文件上传的方式有两种#xff0c;一种是我们经常使用的以字节流的方式进行文件上传#xff0c;另外一种是使用springMVC包装好的解析器进行上传。这两种方式对于实现多文件上传效率上却有着很大的差距#xff0c;下面我们通过实例来看一下这两种方式的实现方… springMVC实现多文件上传的方式有两种一种是我们经常使用的以字节流的方式进行文件上传另外一种是使用springMVC包装好的解析器进行上传。这两种方式对于实现多文件上传效率上却有着很大的差距下面我们通过实例来看一下这两种方式的实现方式同时比较一下在效率上到底存在着多大的差距。 1.下载相关jar包。需要引入的jar出了springMVC的jar包外还需要引入com.springsource.org.apache.commons.fileupload-1.2.0.jar和com.springsource.org.apache.commons.io-1.4.0.jar。所有的jar包可以通过“点击这里”进行下载。 2.配置springAnnotation-servlet.xml文件文件名称可以自定义只要和web.xml中引入的名称一样即可 [html] view plaincopy ?xml version1.0 encodingUTF-8? !-- Bean头部 -- beans xmlnshttp://www.springframework.org/schema/beans xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:phttp://www.springframework.org/schema/p xmlns:mvchttp://www.springframework.org/schema/mvc xmlns:contexthttp://www.springframework.org/schema/context xmlns:utilhttp://www.springframework.org/schema/util xsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd !-- 注解扫描包 -- context:component-scan base-packagecom.tgb.web.controller.annotation/context:component-scan !-- 代替下面的两行代码 -- mvc:annotation-driven/ !-- 静态资源访问 -- mvc:resources location/img/ mapping/img/**/ mvc:resources location/js/ mapping/js/**/ bean idviewResolver classorg.springframework.web.servlet.view.InternalResourceViewResolver property nameprefix value//property property namesuffix value.jsp/property /bean bean idmultipartResolver classorg.springframework.web.multipart.commons.CommonsMultipartResolver property namedefaultEncoding valueutf-8/property property namemaxUploadSize value10485760000/property property namemaxInMemorySize value40960/property /bean /beans 3. 配置web.xml文件 [html] view plaincopy ?xml version1.0 encodingUTF-8? web-app xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlnshttp://java.sun.com/xml/ns/javaee xmlns:webhttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd xsi:schemaLocationhttp://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd idWebApp_ID version2.5 display-namespringMVC1/display-name welcome-file-list welcome-fileindex.html/welcome-file /welcome-file-list servlet servlet-namespringMVC/servlet-name !-- springMVC的分发器 -- servlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-class init-param param-namecontextConfigLocation/param-name param-valueclasspath*:config/springAnnotation-servlet.xml/param-value /init-param !-- 表示当Tomcat已启动的时候初始化这个Servlet -- load-on-startup1/load-on-startup /servlet filter filter-nameencodingFilter/filter-name filter-classorg.springframework.web.filter.CharacterEncodingFilter/filter-class init-param param-nameencoding/param-name param-valueUTF-8/param-value !--设置你想用的字符集我这里用的是GB18030-- /init-param init-param param-nameforceEncoding/param-name param-valuetrue/param-value /init-param /filter filter-mapping filter-nameencodingFilter/filter-name url-pattern/*/url-pattern !--设置你想过滤的页面或者是Servlet根据自己的需要配置-- /filter-mapping servlet-mapping servlet-namespringMVC/servlet-name url-pattern//url-pattern /servlet-mapping /web-app 4. jsp页面代码 [html] view plaincopy % page languagejava contentTypetext/html; charsetUTF-8 pageEncodingUTF-8% !DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN http://www.w3.org/TR/html4/loose.dtd html head script typetext/javascript src../js/jquery-1.7.2.js/script meta http-equivContent-Type contenttext/html; charsetUTF-8 titleInsert title here/title script typetext/javascript i 1; j 1; $(document).ready(function(){ $(#btn_add1).click(function(){ document.getElementById(newUpload1).innerHTMLdiv iddiv_iinput namefile typefile /input typebutton value删除 onclickdel_1(i)//div; i i 1; }); $(#btn_add2).click(function(){ document.getElementById(newUpload2).innerHTMLdiv iddiv_jinput namefile_j typefile /input typebutton value删除 onclickdel_2(j)//div; j j 1; }); }); function del_1(o){ document.getElementById(newUpload1).removeChild(document.getElementById(div_o)); } function del_2(o){ document.getElementById(newUpload2).removeChild(document.getElementById(div_o)); } /script /head body h1springMVC字节流输入上传文件/h1 form nameuserForm1 action/springMVC7/file/upload enctypemultipart/form-data methodpost div idnewUpload1 input typefile namefile /div input typebutton idbtn_add1 value增加一行 input typesubmit value上传 /form br br hr alignleft width60% color#FF0000 size3 br br h1springMVC包装类上传文件/h1 form nameuserForm2 action/springMVC7/file/upload2 enctypemultipart/form-data methodpost div idnewUpload2 input typefile namefile /div input typebutton idbtn_add2 value增加一行 input typesubmit value上传 /form /body /html 5.实现上传功能的java bean [java] view plaincopy package com.tgb.web.controller.annotation.upload; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.Date; import java.util.Iterator; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.swing.filechooser.FileNameExtensionFilter; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.commons.CommonsMultipartFile; import org.springframework.web.multipart.commons.CommonsMultipartResolver; import org.springframework.web.servlet.ModelAndView; import com.tgb.web.controller.entity.User; Controller RequestMapping(/file) public class UploadController { RequestMapping(/upload ) public String addUser(RequestParam(file) CommonsMultipartFile[] files,HttpServletRequest request){ for(int i 0;ifiles.length;i){ System.out.println(fileName---------- files[i].getOriginalFilename()); if(!files[i].isEmpty()){ int pre (int) System.currentTimeMillis(); try { //拿到输出流同时重命名上传的文件 FileOutputStream os new FileOutputStream(H:/ new Date().getTime() files[i].getOriginalFilename()); //拿到上传文件的输入流 FileInputStream in (FileInputStream) files[i].getInputStream(); //以写字节的方式写文件 int b 0; while((bin.read()) ! -1){ os.write(b); } os.flush(); os.close(); in.close(); int finaltime (int) System.currentTimeMillis(); System.out.println(finaltime - pre); } catch (Exception e) { e.printStackTrace(); System.out.println(上传出错); } } } return /success; } RequestMapping(/upload2 ) public String upload2(HttpServletRequest request,HttpServletResponse response) throws IllegalStateException, IOException { //创建一个通用的多部分解析器 CommonsMultipartResolver multipartResolver new CommonsMultipartResolver(request.getSession().getServletContext()); //判断 request 是否有文件上传,即多部分请求 if(multipartResolver.isMultipart(request)){ //转换成多部分request MultipartHttpServletRequest multiRequest (MultipartHttpServletRequest)request; //取得request中的所有文件名 IteratorString iter multiRequest.getFileNames(); while(iter.hasNext()){ //记录上传过程起始时的时间用来计算上传时间 int pre (int) System.currentTimeMillis(); //取得上传文件 MultipartFile file multiRequest.getFile(iter.next()); if(file ! null){ //取得当前上传文件的文件名称 String myFileName file.getOriginalFilename(); //如果名称不为“”,说明该文件存在否则说明该文件不存在 if(myFileName.trim() !){ System.out.println(myFileName); //重命名上传后的文件名 String fileName demoUpload file.getOriginalFilename(); //定义上传路径 String path H:/ fileName; File localFile new File(path); file.transferTo(localFile); } } //记录上传该文件后的时间 int finaltime (int) System.currentTimeMillis(); System.out.println(finaltime - pre); } } return /success; } RequestMapping(/toUpload ) public String toUpload() { return /upload; } } 6.最后看后台打印数据数据来源于后台打印的上传文件所用的时间第一幅图片是使用字节流写入方式完成三个文件上传中每个文件用时第二幅图片是使用springMVC包装好的解析器进行的三个相同的文件上传中每个文件的用时 字节流实现文件上传的传递效率结果显示传递三个文件用时分别为534ms453ms和387ms。 使用springMVC解析器进行文件上传用时分别为2ms1ms和2ms。 通过对比这两种方式我们可以发现使用springMVC进行多文件的效率显然要比字符流写入方式效率上要高得多。