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>
分享到:
相关推荐
Commons FileUpload是Apache组织提供的一款强大的Java文件上传处理组件,常用于Web应用中处理用户通过表单上传的文件。在Web开发中,尤其是在涉及到用户上传照片、文档等大文件时,FileUpload组件提供了方便、高效的...
在实际应用中,结合Servlet或Spring MVC等框架,可以轻松地集成Apache Commons FileUpload,处理用户的文件上传请求,从而构建安全、可靠的文件上传功能。同时,这个库也支持自定义策略,如文件存储路径、临时文件...
7. **与其他库的集成**:Apache Commons FileUpload可与Servlet API、Spring MVC、Struts等Web框架无缝集成,简化了在这些框架中实现文件上传的复杂性。 源码分析对于理解其内部工作原理非常有帮助。`commons-...
7. **与其他组件集成**:FileUpload常与Spring MVC、Struts等框架集成,处理文件上传请求。通过了解其工作原理,开发者可以更好地调试和优化与这些框架的交互。 总的来说,Apache Commons FileUpload是处理HTTP文件...
7. **与Struts、Spring等框架的整合**:Commons FileUpload库可以轻松与主流的Java Web框架集成,如Struts、Spring MVC等,使得文件上传功能的实现更加便捷。 总的来说,Apache Commons FileUpload库是Java开发人员...
总的来说,Apache Commons FileUpload库是Java Web开发中处理文件上传的标准工具之一,它简化了流程,提供了丰富的配置选项,使得开发者能够更加专注于业务逻辑,而不是文件上传的底层细节。通过正确地集成和使用这...
9. **与Spring框架的整合**:在Spring MVC框架中,FileUpload可以与ModelAndView和MultipartFile接口一起使用,简化文件上传的处理逻辑。 10. **源码分析**:通过查看"commons-fileupload-1.4-src"中的源代码,...
此外,它也能与Spring MVC、Struts等Web框架无缝集成,简化文件上传的实现。 8. **版本更新**:`1.2.1`是该库的一个较旧版本,后续的版本可能添加了更多功能和修复了已知问题。使用时,建议根据项目需求选择合适且...
《Java Web文件上传:commons-fileupload-1.2.1详解》 在Java Web开发中,文件上传是一项常见的功能,用户可能需要上传图片、文档等各类文件。Apache Commons FileUpload库是一个强大的工具,用于处理HTTP协议中的...
6. **与其他框架的集成**:Apache Commons FileUpload可方便地与Struts、Spring MVC等Web框架结合,提供优雅的文件上传解决方案。 总之,Apache Commons FileUpload 1.2.1是一个强大的文件上传组件,它简化了在Java...
虽然Apache Commons FileUpload库主要处理文件上传,但其内部依赖于Apache Commons IO库来处理基本的文件操作。`commons-io.jar`包含了各种IO相关的工具类,如文件复制、文件比较、流操作等。在处理文件上传时,这些...
总的来说,Apache Commons FileUpload是Java Web开发中不可或缺的工具,它简化了文件上传操作,使开发者能够专注于业务逻辑,而不是底层的文件处理细节。正确理解和使用这个库,可以提高开发效率,提升用户体验。
`Commons FileUpload`可以轻松与其他Java Web框架集成,如Spring MVC、Struts等。此外,它还可以与其他工具,如Apache Tika(用于文件类型的识别)或Apache POI(用于处理Office文档)结合,提供更丰富的功能。 ###...
6. **与其他库的集成**:Commons-FileUpload可以很好地与Servlet API和其他Java Web框架(如Spring MVC)集成,使得在各种环境中使用都很方便。 7. **多线程支持**:在高并发环境下,库支持多线程处理上传请求,...
FileUpload库可以很好地与Spring MVC、Struts等其他框架集成,简化文件上传的处理逻辑。 9. **版本更新** “commons-fileupload-1.3.1”是FileUpload的一个稳定版本,相比早期版本,它可能包含了性能优化、新特性...
5. **易于集成**:它可以轻松地与Spring MVC、Struts等Web框架集成,提供无缝的文件上传支持。 这个压缩包中可能包含的文件有: - `fileupload`代码示例:这是一段展示如何使用Apache Commons FileUpload库的Java...
此外,也可以与Spring MVC等框架集成,简化文件上传的处理流程。 总结起来,Apache Commons FileUpload是一个强大的工具,能够有效地处理Java Web应用中的文件上传需求。通过理解和使用这个库,开发者可以构建更...
SpringMVC在内部集成了Apache Commons FileUpload,所以我们可以直接使用`@RequestParam("file") MultipartFile file`这样的注解来接收上传的文件。在处理这个参数时,我们需要确保文件有效并将其保存到服务器的某个...
除了直接使用外,Commons FileUpload还可以与Spring MVC、Struts等Web框架集成,提供便捷的文件上传处理能力。 总的来说,Apache Commons FileUpload 1.2是一个强大的工具,简化了在JSP应用中实现文件上传和下载的...
在Spring MVC中,可以方便地集成FileUpload组件,通过`MultipartFile`接口处理文件上传。只需在控制器方法上添加`@RequestParam("file") MultipartFile file`参数,Spring会自动处理文件上传。 **7. 文件验证** 在...