SpringMVC上传文件FileUpload使用方法详解
本文实例为大家分享了SpringMVC上传文件FileUpload的具体代码,供大家参考,具体内容如下
我是在已经搭建好的springMVC环境下,maven工程中的pom.xml所需要的jar包(其中spring上传文件的两个主要jar:commons-fileupload.jar和commons-io.jar):
4.0.0 com.zhihua SpringMVC_FileUpload war 0.0.1-SNAPSHOT SpringMVC_FileUploadMavenWebapp http://maven.apache.org 3.2.8.RELEASE 4.10 junit junit 3.8.1 test commons-fileupload commons-fileupload 1.3.1 org.springframework spring-core ${spring.version} org.springframework spring-webmvc ${spring.version} org.springframework spring-context ${spring.version} org.springframework spring-context-support ${spring.version} org.springframework spring-aop ${spring.version} org.springframework spring-aspects ${spring.version} org.springframework spring-tx ${spring.version} org.springframework spring-jdbc ${spring.version} org.springframework spring-web ${spring.version} org.springframework spring-test ${spring.version} test jstl jstl 1.2 javax.servlet javax.servlet-api 3.0.1 provided javax.servlet.jsp jsp-api 2.1 provided SpringMVC_FileUpload
在spring-mvc.xml中添加代码:
前端页面(fileUpload.jsp)和上传成功返回页面(success.jsp):
<%@pagelanguage="java"contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%> <%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%>springmvc-文件上传 采用流的方式上传文件
"method="post"enctype="multipart/form-data">
采用multipart提供的file.transfer方法上传文件1
"method="post"enctype="multipart/form-data">
采用multipart提供的file.transfer方法上传文件2
"method="post"enctype="multipart/form-data">
使用springMVC提供的方法上传文件
"method="post"enctype="multipart/form-data">
<%@pagelanguage="java"contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>Inserttitlehere 文件上传成功!
controller的代码:
packagecom.zhihua.controller; importjava.io.File; importjava.io.FileOutputStream; importjava.io.IOException; importjava.io.InputStream; importjava.io.OutputStream; importjava.util.Date; importjava.util.Iterator; importjavax.servlet.http.HttpServletRequest; importorg.springframework.stereotype.Controller; importorg.springframework.web.bind.annotation.RequestMapping; importorg.springframework.web.bind.annotation.RequestParam; importorg.springframework.web.multipart.MultipartFile; importorg.springframework.web.multipart.MultipartHttpServletRequest; importorg.springframework.web.multipart.commons.CommonsMultipartFile; importorg.springframework.web.multipart.commons.CommonsMultipartResolver; @Controller @RequestMapping("/fileUpload") publicclassFileUploadController{ /** *通过流的方式上传文件 *@RequestParam("file")将name=file控件得到的文件封装成CommonsMultipartFile对象 *<请替换成功能描述>
*<请替换成详细描述> *@paramfile *@return *@authorcaizh *@since[1.0.0] *@version[1.0.0,2017年2月5日] */ @RequestMapping("/upload_01") publicStringfileUpload_1(@RequestParam("file_01")CommonsMultipartFilefile)throwsIOException{ //用来检测程序运行时间 longstartTime=System.currentTimeMillis(); System.out.println("fileName:"+file.getOriginalFilename()); try{ //获取输出流 OutputStreamos=newFileOutputStream("E:/"+newDate().getTime()+file.getOriginalFilename()); //获取输入流CommonsMultipartFile中可以直接得到文件的流 InputStreamis=file.getInputStream(); inttemp; //一个一个字节的读取并写入 while((temp=is.read())!=(-1)){ os.write(temp); } os.flush(); os.close(); is.close(); }catch(Exceptione){ e.printStackTrace(); } longendTime=System.currentTimeMillis(); System.out.println("方法一的运行时间:"+String.valueOf(endTime-startTime)+"ms"); return"view/success"; } /** *采用file.Transto来保存上传的文件 *<请替换成功能描述>
*<请替换成详细描述> *@paramfile *@return *@throwsIOException *@authorcaizh *@since[1.0.0] *@version[1.0.0,2017年2月5日] */ @RequestMapping("/upload_02") publicStringfileUpload_2(@RequestParam("file_02")CommonsMultipartFilefile)throwsIOException{ longstartTime=System.currentTimeMillis(); System.out.println("fileName:"+file.getOriginalFilename()); Stringpath="E:/"+newDate().getTime()+file.getOriginalFilename(); FilenewFile=newFile(path); //通过CommonsMultipartFile的方法直接写文件 file.transferTo(newFile); longendTime=System.currentTimeMillis(); System.out.println("方法二的运行时间:"+String.valueOf(endTime-startTime)+"ms"); return"view/success"; } /** *使用MultipartFile上传文件 *<请替换成功能描述>
*<请替换成详细描述> *@paramfile *@return *@authorcaizh *@since[1.0.0] *@version[1.0.0,2017年2月5日] */ @RequestMapping("/upload_03") publicStringfileUpload_3(@RequestParam(value="file_03",required=false)MultipartFilefile, HttpServletRequestrequest){ Stringpath=request.getSession().getServletContext().getRealPath("upload"); System.out.println(path); StringfileName=file.getOriginalFilename(); FiletargetFile=newFile(path,fileName); if(!targetFile.exists()){ targetFile.mkdirs(); } //保存 try{ file.transferTo(targetFile); }catch(Exceptione){ e.printStackTrace(); } return"view/success"; } /** *采用spring提供的上传文件的方法 *<请替换成功能描述>
*<请替换成详细描述> *@paramrequest *@return *@throwsIllegalStateException *@throwsIOException *@authorcaizh *@since[1.0.0] *@version[1.0.0,2017年2月5日] */ @RequestMapping("/upload_spring") publicStringspringUpload(HttpServletRequestrequest)throwsIllegalStateException,IOException{ longstartTime=System.currentTimeMillis(); //将当前上下文初始化给CommonsMutipartResolver(多部分解析器) CommonsMultipartResolvermultipartResolver=newCommonsMultipartResolver(request.getSession().getServletContext()); //检查form中是否有enctype="multipart/form-data" if(multipartResolver.isMultipart(request)) { //将request变成多request MultipartHttpServletRequestmultiRequest=(MultipartHttpServletRequest)request; //获取multiRequest中所有的文件名 Iteratoriter=multiRequest.getFileNames(); while(iter.hasNext()){ //一次遍历所有的文件 MultipartFilefile=multiRequest.getFile(iter.next().toString()); if(file!=null){ Stringpath="E:/springUpload"+file.getOriginalFilename(); //上传 file.transferTo(newFile(path)); } } } longendTime=System.currentTimeMillis(); System.out.println("方法三的运行时间:"+String.valueOf(endTime-startTime)+"ms"); return"view/success"; } }
好了,全部代码都给出了,博主是测试成功了,感兴趣的朋友可以去比较不同上传方式的效率!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。