Commons fileupload是当前比较流行的文件上传组件,Spring为提供了对Commons fileupload的集成,只需简单几步便可轻易实现文件上传,十分简便。
一。引入必要的jar包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
<!-- commons-fileupload dependencies -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
Spring提供的集成Commons fileupload的接口和类都在spring-webmvc这个包里,如
CommonsMultipartResolver,CommonsFileUploadSupport,MultipartResolver,
MultipartHttpServletRequest等。
二。定义multipartResolver bean
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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">
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxInMemorySize" value="10240"/>
<property name="maxUploadSize" value="50000000"/>
</bean>
</beans>
multipartResolver这个标志符是固定不可改变的,因为研究Spring源代码发现在核心控制器DispatcherServlet
里,有这样几段代码:
/** Well-known name for the MultipartResolver object in the bean factory for this namespace. */
public static final String MULTIPART_RESOLVER_BEAN_NAME = "multipartResolver";
/**
* Initialize the MultipartResolver used by this class.
* <p>If no bean is defined with the given name in the BeanFactory for this namespace,
* no multipart handling is provided.
*/
private void initMultipartResolver(ApplicationContext context) {
try {
this.multipartResolver = context.getBean(MULTIPART_RESOLVER_BEAN_NAME, MultipartResolver.class);
if (logger.isDebugEnabled()) {
logger.debug("Using MultipartResolver [" + this.multipartResolver + "]");
}
}
catch (NoSuchBeanDefinitionException ex) {
// Default is no multipart resolver.
this.multipartResolver = null;
if (logger.isDebugEnabled()) {
logger.debug("Unable to locate MultipartResolver with name '" + MULTIPART_RESOLVER_BEAN_NAME +
"': no multipart request handling provided");
}
}
}
这以上代码发现,Spring使 用MULTIPART_RESOLVER_BEAN_NAME这个名字来获取在
application-context.xml定义的CommonsMultipartResolver bean,该bean用于解析上传文件表单。
三。一个简单的文件上传表单控制器
package com.dream.controllers.photo;
import com.dream.model.photo.Photo;
import com.dream.service.standard.PhotoService;
import com.dream.utils.StringChecker;
import org.springframework.validation.BindException;
import org.springframework.web.bind.ServletRequestUtils;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
/**
* Created by IntelliJ IDEA.
* User: Zhong Gang
* Date: 11-8-15
* Time: 下午10:12
*/
public class PhotoFormController extends SimpleFormController {
private static final String FILE_UPLOAD_PATH = "F://jetty-distribution-7.4.5.v20110725//upload//";
private PhotoService photoService;
public PhotoFormController() {
setCommandName("photo");
setCommandClass(Photo.class);
setFormView("photo/photoform");
}
@Override
protected Object formBackingObject(HttpServletRequest request) throws Exception {
String photoGuid = ServletRequestUtils.getStringParameter(request, "photoGuid");
if (StringChecker.hasText(photoGuid)) {
Photo photo = photoService.loadPhotoByGuid(photoGuid);
return photo;
}
return new Photo();
}
@Override
protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception {
Photo photo = (Photo) command;
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
MultipartFile file = multipartRequest.getFile("file");
String fileName = file.getOriginalFilename();
String path = FILE_UPLOAD_PATH + fileName;
photo.setPath(fileName);
File destination = new File(path);
file.transferTo(destination);
photoService.saveOrUpdate(photo);
return new ModelAndView("photo/photoview", "photo", photo);
}
public void setPhotoService(PhotoService photoService) {
this.photoService = photoService;
}
}
四。文件上传表单
<%--
Created by IntelliJ IDEA.
User: ZhongGang
Date: 11-8-15
Time: 下午10:34
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>Photo form</title>
<link href="/resources/css/main.css" rel="stylesheet" type="text/css" media="screen"/>
</head>
<body>
<div id="wrapper">
<jsp:include page="../decorator/header.jsp"/>
<div id="page">
<div>
<form:form commandName="photo" enctype="multipart/form-data">
<table>
<tr>
<td>Name :</td>
<td>
<form:input path="name"/>
</td>
</tr>
<tr>
<td>
Upload file:
</td>
<td>
<input type="file" name="file"/>
</td>
</tr>
<tr>
<td>Description :</td>
<td>
<form:input path="description"/>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="Submit"/>
</td>
</tr>
</table>
</form:form>
</div>
</div>
<jsp:include page="../decorator/footer.jsp"/>
</div>
</body>
</html>
分享到:
相关推荐
spring-web.jar(必须) :这个jar 文件包含Web 应用开发时,用到Spring 框架时所需的核心类,包括自动载入Web Application Context 特性的类、Struts 与JSF 集成类、文件上传的支持类、Filter 类和大量工具辅助类。...
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar commons-fileupload-1.3.1.jar commons-io-2.2.jar
Apache fileupload 文件上传组件 Apache commons-collections 封装好的各种集合类和集合工具类 Apache commons-io Apache基金会创建并维护的Java函数库 Apache commons-logging 通用的日志接口 dom4j 优秀的JavaXML ...
1.commons-fileupload.jar(commons项目中的关于文件上传的包, struts2.1.6版本后必须加入此文件) 2.commons-io.jar(commons项目(commons项目就是java中一些常用的公共的组件)的io子项目,是处理异常的) 3....
commons-fileupload-1.2.2.jar freemarker-2.3.16.jar ognl-3.0.1.jar javassist-3.12.0.GA.jar(hibernate同样需要) spring: spring.jar commons-logging-1.1.1.jar common-annotations.jar aspectjrt....
springmvc4.3.3和mybatis3.4.1集成最新全部jar包,还包含了其他一些常用的jar包,很全,... lib/commons-fileupload-1.3.2.jar lib/commons-io-2.5.jar lib/commons-lang-2.6.jar lib/commons-validator-1.5.1.jar
1.commons-fileupload.jar(commons项目中的关于文件上传的包, struts2.1.6版本后必须加入此文件) 2.commons-io.jar(commons项目(commons项目就是java中一些常用的公共的组件)的io子项目,是处理异常的) 3....
1.commons-fileupload.jar(commons项目中的关于文件上传的包, struts2.1.6版本后必须加入此文件) 2.commons-io.jar(commons项目(commons项目就是java中一些常用的公共的组件)的io子项目,是处理异常的) 3....
Java版水果管理系统源码 #XQOO-CLOUD 后台管理系统 ##1.0版本 系统搭建数据库建表脚本在根目录scripts下,部分...commons-fileupload文件上传工具 rg.jsoup HTML解析器 org.apache.poi 表格文件处理 org.apache.veloc
第15章 在线文件上传和下载(struts 2.x+fileupload) 15.1 在线文件上传和下载模块原理 15.2 文件上传组件fileupload 15.3 初步使用文件上传组件(components-fileupload) 15.4 单文件的上传 15.5 多...
jun_springcloud: 基础篇:企业级开发组件功能列表(jun_plugin) 【fastdfs-client-java】 【jun_activiti】 【jun_ajax】 【jun_aliyun_sms】 【jun_cron】 【jun_dao_hibernate】 【jun_datasource】 【jun_...