基于spring3.0mvc框架的文件上传实现

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

SPRing 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还是 Struts 这样的 Web 框架。通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如javaServer Pages(jsp)技术、Velocity、Tiles、iText 和 POI。Spring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

第一步:1. spring使用了apache-commons下得上传组件,因此,我们需要引入两个jar包:

apache-commons-fileupload.jarapache-commons-io.jar第二步:2. 在springmvc-servlet.xml配置文件中,增加CommonsMultipartResoler配置:

<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:p="http://www.springframework.org/schema/p"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://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.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"><!--扫描包--><context:component-scanbase-package="com.tgb.web.controller.annotation"/><!--启用注解包--><mvc:annotation-driven/><!--被上面替代

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"></bean>

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean>--><!--视图解析器--><beanid="viewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver"><propertyname="prefix"value="/"/><propertyname="suffix"value=".jsp"/></bean><!--上传配置文件--><beanid="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!--默认编码 (ISO-8859-1)--><propertyname="defaultEncoding"value="utf-8"/><!--最大文件大小,-1为无限止(-1)--><propertyname="maxUploadSize"value="20000000000"/><!--最大内存大小 (10240)--><propertyname="maxInMemorySize"value="200000"/></bean><!--静态资源访问--><!--<mvc:resources location="/images/" mapping="/images/**"/>--></beans>

第三步:配置web.xml

1<?xml version="1.0" encoding="UTF-8"?>2<web-appversion="2.5"3xmlns="http://java.sun.com/xml/ns/javaee"4xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"5xsi:schemaLocation="http://java.sun.com/xml/ns/javaee6http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">78910<welcome-file-list>11<welcome-file>index.jsp</welcome-file>12</welcome-file-list>1314<servlet>15<servlet-name>springMVC</servlet-name>16<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>17<init-param>18<param-name>contextConfigLocation</param-name>19<param-value>classpath*:config/springMVC-servlet.xml</param-value>20</init-param>21<load-on-startup>1</load-on-startup>22</servlet>2324<!--解决乱码-->25<filter>26<filter-name>encodingFilter</filter-name>27<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>28<init-param>29<param-name>encoding</param-name>30<param-value>UTF-8</param-value>31</init-param>32<init-param>33<param-name>froceEncoding</param-name>34<param-value>true</param-value>35</init-param>36</filter>3738<filter-mapping>39<filter-name>encodingFilter</filter-name>40<url-pattern>/*</url-pattern>41</filter-mapping>42434445<servlet-mapping>46<servlet-name>springMVC</servlet-name>47<url-pattern>/</url-pattern>48</servlet-mapping>49</web-app>

第四步:建立upload.jsp页面,内容如下:

1<%@ page language="java"import="java.util.*"pageEncoding="utf-8"%>2<%3Stringpath=request.getContextPath();4StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";5%>67<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">8<html>9<head>10<basehref="<%=basePath%>">1112<title>测试springmvc中上传的实现</title>13<metahttp-equiv="pragma"content="no-cache">14<metahttp-equiv="cache-control"content="no-cache">15<metahttp-equiv="expires"content="0">16<metahttp-equiv="keyWords"content="keyword1,keyword2,keyword3">17<metahttp-equiv="description"content="This is my page">18<!--19<link rel="stylesheet" type="text/CSS" href="styles.css">20-->21</head>2223<body>24<formaction="uploadContoller?toupload"method="post"enctype="multipart/form-data">25文件上传:<inputtype="file"value=""name="file">26<inputtype="submit"value="上传"/>27</form>28</body>29</html>

建立控制器UploadContoller.java(三种方法支持文件上传),代码如下:

packagecom.tgb.web.controller.annotation;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.util.Date;importjava.util.Iterator;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;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("/uploadContoller")publicclassUploadContoller {//========================第一种:======================@RequestMapping(params="uploadUser")//普通上传publicString uploadUser(@RequestParam("file") CommonsMultipartFile file,

HttpServletRequest request, HttpServletResponse response)throwsIOException {

System.out.println("filename++++++++" +file.getOriginalFilename());if(!file.isEmpty()) {try{

Date date=newDate();

FileOutputStream os=newFileOutputStream("../images"

+ date.getTime() +file.getOriginalFilename());

InputStream in=file.getInputStream();intb = 0;while((b = in.read()) != -1) {

os.write(b);

}

os.flush();

os.close();

in.close();

}catch(FileNotFoundException e) {//TODO Auto-generated catch blocke.printStackTrace();

}

}return"success";

}//========================第二种:======================@RequestMapping(params="toupload")publicString toupload(HttpServletRequest request,

HttpServletResponse response) {//创建一个通用的多部分解析器CommonsMultipartResolver multipartResolver =newCommonsMultipartResolver(

request.getsession().getServletContext());//判断 request 是否有文件上传,即多部分请求if(multipartResolver.isMultipart(request)) {//转换成多部分requestMultipartHttpServletRequest multiRequest =(MultipartHttpServletRequest) request;//取得request中的所有文件名Iterator<String> iter =multiRequest.getFileNames();while(iter.hasNext()) {//记录上传过程起始时的时间,用来计算上传时间intpre = (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 = "/images/" +fileName;

File localFile=newFile(path);try{

file.transferTo(localFile);

}catch(IllegalStateException e) {//TODO Auto-generated catch blocke.printStackTrace();

}catch(IOException e) {//TODO Auto-generated catch blocke.printStackTrace();

}

}

}//记录上传该文件后的时间intfinaltime = (int) System.currentTimeMillis();

System.out.println(finaltime-pre);

}

}return"success";

}//========================第三种:======================@RequestMapping(params="niceupload")//优化上传publicString niceupload(HttpServletRequest request,

HttpServletResponse response) {

CommonsMultipartResolver multipartResolver=newCommonsMultipartResolver(

request.getSession().getServletContext());if(multipartResolver.isMultipart(request)) {

MultipartHttpServletRequest mulitRequest=(MultipartHttpServletRequest) (request);

Iterator<String> iterator =mulitRequest.getFileNames();while(iterator.hasNext()) {

MultipartFile fiel=mulitRequest.getFile((String) iterator

.next());if(fiel !=null) {

String fileName= "demoUpload" +fiel.getOriginalFilename();

String path= "D:/" +fileName;

File localfile=newFile(path);try{

fiel.transferTo(localfile);

}catch(IllegalStateException e) {//TODO Auto-generated catch blocke.printStackTrace();

}catch(IOException e) {//TODO Auto-generated catch blocke.printStackTrace();

}

}

}

}return"/success";

}

}

5. 建立success.jsp页面

<%@ page language="java"import="java.util.*"contentType="text/html;charset=utf-8"pageEncoding="utf-8"%><%@taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>传递参数</title></head><body><h1>上传成功 +++++++++++</h1></body></html>

发布项目,运行测试:http://localhost:8080/springmvc03/upload.jsp 3、 进入项目发布后的目录,发现文件上传成功:

您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态。

如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦

如果您对文章内容有任何疑问, 可以通过评论或发邮件的方式联系我: 2276292708@QQ.com或加入JAVA技术交流群:306431857

如果需要转载,请注明出处,谢谢!!

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航