Spring MVC中上传文件实例
SpringMVC(注解)上传文件需要注意的几个地方:
1、form的enctype="multipart/form-data",这个是上传文件必须的
2、applicationContext.xml配置:
<!--SpringMVC上传文件时,需要配置MultipartResolver处理器--> <beanid="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <propertyname="defaultEncoding"value="UTF-8"/> <!--指定所上传文件的总大小不能超过200KB。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和--> <propertyname="maxUploadSize"value="200000"/> <!--最大内存大小(10240)--> <propertyname="maxInMemorySize"value="40960"/> </bean> <!--SpringMVC在超出上传文件限制时,会抛出org.springframework.web.multipart.MaxUploadSizeExceededException--> <!--该异常是SpringMVC在检查上传的文件信息时抛出来的,而且此时还没有进入到Controller方法中--> <beanid="exceptionResolver"class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <propertyname="exceptionMappings"> <props> <!--遇到MaxUploadSizeExceededException异常时,自动跳转到/WEB-INF/jsp/error_fileupload.jsp页面--> <propkey="org.springframework.web.multipart.MaxUploadSizeExceededException">error_fileupload</prop> </props> </property> </bean>
用于上传的表单页面/WEB-INF/jsp/upload.jsp
<%@pagelanguage="java"contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%> <%@taglibprefix="c"uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <scripttype="text/javascript"src="../js/jquery-1.7.1.min.js"></script> <metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"> <title>上传图片</title> </head> <body> <formaction="<%=request.getContextPath()%>/upload/filesUpload"method="POST"enctype="multipart/form-data"> yourfile:<inputtype="file"name="myfiles"/><br/> yourfile:<inputtype="file"name="myfiles"/><br/> <inputtype="submit"value="上传图片"/> </form> </body> </html>
上传文件内容过大时的提示页面/WEB-INF/jsp/error_fileupload.jsp
<%@pagelanguage="java"pageEncoding="UTF-8"%> <h1>文件过大,请重新选择</h1>
上传文件的核心UploadController类
packagecom.ljq.web.controller.annotation; importjava.io.File; 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; /** *上传图片 * *@authorAdministrator * */ @Controller @RequestMapping("/upload") publicclassUploadController{ @RequestMapping("/toUpload") publicStringtoUpload(){ return"/upload"; } /*** *保存文件 * *@paramfile *@return */ privatebooleansaveFile(HttpServletRequestrequest,MultipartFilefile){ //判断文件是否为空 if(!file.isEmpty()){ try{ //保存的文件路径(如果用的是Tomcat服务器,文件会上传到\\%TOMCAT_HOME%\\webapps\\YourWebProject\\upload\\文件夹中 ) StringfilePath=request.getSession().getServletContext() .getRealPath("/")+"upload/"+file.getOriginalFilename(); FilesaveDir=newFile(filePath); if(!saveDir.getParentFile().exists()) saveDir.getParentFile().mkdirs(); //转存文件 file.transferTo(saveDir); returntrue; }catch(Exceptione){ e.printStackTrace(); } } returnfalse; } /** *上传图片 * *@paramfiles *@paramrequest *@return */ @RequestMapping("/filesUpload") publicStringfilesUpload(@RequestParam("myfiles")MultipartFile[]files, HttpServletRequestrequest){ if(files!=null&&files.length>0){ for(inti=0;i<files.length;i++){ MultipartFilefile=files[i]; //保存文件 saveFile(request,file); } } //重定向 return"redirect:/upload/toUpload"; } }
到此文件上传开发就结束了。
MultipartFile类常用的一些方法:
StringgetContentType()//获取文件MIME类型
InputStreamgetInputStream()//返回文件流
StringgetName()//获取表单中文件组件的名字
StringgetOriginalFilename()//获取上传文件的原名
longgetSize()//获取文件的字节大小,单位byte
booleanisEmpty()//是否为空
voidtransferTo(Filedest)//保存到一个目标文件中