Spring mvcシリーズ7のファイルをアップロードします.


springMVCデフォルトの解析器にはファイルアップロードの解析が入っていません.springmvcを使ってファイルアップロードの解析器を処理します.ファイルアップロードを処理するには、springmvcで提供されるMultipartResoliverの申明が必要です.また、Commmons MultipartResolaverがMultionverインターフェイスを実現しましたので、sprigvcで設定できます.
 
<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="defaultEncoding" value="utf-8" />
		<property name="maxUploadSize" value="10485760000" />
		<property name="maxInMemorySize" value="40960" />
	</bean>
 
まずファイルアップロードに必要なカバンを紹介します.  commons-fileuplad-*.jar
新しいJSPページを作成します.
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>    </title>
</head>
<body>
	<%--<form action="user/fileUpload" method="post" enctype="multipart/form-data">--%>
	<form action="user/fileUpload" method="post" enctype="multipart/form-data">
		<input type="file" name="fileUpload" />
		<input type="submit" value="  " />
	</form>
</body>
</html>
 
 springmvcはファイルをアップロードする形式がたくさんあります.ここで二つを紹介します.
 
第一種類は、Controllerを見ます.
package gd.hz.springmvc.controller;

import java.io.File;
import java.io.IOException;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import org.springframework.web.servlet.ModelAndView;

@Controller("userController")
@RequestMapping("user")
public class UserController {

	//        
	@RequestMapping(value = "fileUpload", method = RequestMethod.POST)
	public ModelAndView fileUpload(
			@RequestParam("fileUpload") CommonsMultipartFile file) {
		//       
		System.out.println(file.getContentType());
		//       
		System.out.println(file.getSize());
		//       
		System.out.println(file.getOriginalFilename());

		//         
		if (!file.isEmpty()) {
			String path = "D:/" + file.getOriginalFilename();
			File localFile = new File(path);
			try {
				file.transferTo(localFile);
			} catch (IllegalStateException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return new ModelAndView("dataSuccess");
	}
}
種類のCommons MultiiprtFileは、ファイルサイズ、ファイル名、ファイルタイプなど、具体的な使い方はspringのドキュメントを見ることができます.
 
ファイルアップロードの第二の方法は、この方法がよく使われています.
package gd.hz.springmvc.controller;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

@Controller("userController")
@RequestMapping("user")
public class UserController {

	//        
	@RequestMapping(value = "fileUpload2", method = RequestMethod.POST)
	public String fileUpload2(HttpServletRequest request)
			throws IllegalStateException, IOException {
		//       
		CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
				request.getSession().getServletContext());

		//   form   enctype="multipart/form-data"
		if (multipartResolver.isMultipart(request)) {
			MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;

			Iterator<String> iter = multiRequest.getFileNames();
			while (iter.hasNext()) {

				//  CommonsMultipartFile    ,       .
				MultipartFile file = multiRequest.getFile(iter.next());
				if (file != null) {
					String fileName = "demoUpload" + file.getOriginalFilename();
					String path = "D:/" + fileName;

					File localFile = new File(path);
					file.transferTo(localFile);
				}

			}
		}
		return "dataSuccess";
	}
}
 MultipartHttpServletRequestは、複数のファイルとファイル名を取得することができ、各ファイルを巡回して取得することができます.