`
Wind_ZhongGang
  • 浏览: 260462 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Spring集成Commons fileupload,文件上传

阅读更多

  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>
1
0
分享到:
评论
2 楼 Wind_ZhongGang 2014-11-11  
yo8237233 写道
你这样的话如果上传文件超过了50000000就会报异常

根据实际需要自己定
1 楼 yo8237233 2014-11-08  
你这样的话如果上传文件超过了50000000就会报异常

相关推荐

Global site tag (gtag.js) - Google Analytics