Springmvc CommonsMultipartResolver实现简单多文件上传,单文件上传

445 阅读1分钟

一.多文件上传

首先,pom.xml添加依赖。

<dependency>
   <groupId>commons-fileupload</groupId>
   <artifactId>commons-fileupload</artifactId>
   <version>1.2.1</version> 
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-io</artifactId>
    <version>1.3.2</version>
</dependency>

第二,servlet-context.xml中添加CommonsMultipartResolver的bean。

defaultEncoding 默认编码。

maxUploadSize 允许的最大上传文件大小。单位是字节。

<beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
	<beans:property name="defaultEncoding" value="UTF-8" />
	<beans:property name="maxUploadSize" value="1048560000" />
</beans:bean>

做一个简单的jsp表单。multiple属性设置为:"multiple"。

<form action="/test/upload" method="post" enctype="multipart/form-data">
	<p><input class='fileInput' type="file" name="files" multiple="multiple"></p>
	<p><input type="submit" value="上传"></p>
</form>

最后,在controller中试一下能否上传。

@RequestMapping(value = "upload")
public String multiFileUpload(@ModelAttribute FileUploadForm files, HttpServletRequest request) throws Exception {
	
	for (MultipartFile multipartFile : files.getFiles()) {
		String originalFilename = multipartFile.getOriginalFilename();
		if (!originalFilename.isEmpty()) {
			File dest = new File(request.getSession().getServletContext().getRealPath("/upload") + "\\" + originalFilename);
			if(!dest.getParentFile().exists()) {
				dest.mkdir();
			}
			multipartFile.transferTo(dest);
			System.out.println(dest.getPath());
		}
	}
	
	return "upload";
}

需要注意的是,由于controller接收多个文件,所以要自己建一个用于接收多个MultipartFile的类。此处为FileUploadForm。

此类必须提供getter跟setter。

public class FileUploadForm {
	List<MultipartFile> files;

	  public List<MultipartFile> getFiles() {
	    return files;
	  }

	  public void setFiles(List<MultipartFile> files) {
	    this.files = files;
	  }
}

二.单文件上传

如果想只传一个文件当然也是可以的。首先,创建以下jsp页面

<form action="/test/doSingleUpload" method="post" enctype="multipart/form-data">
	<p><input class='fileInput' type="file" name="file"></p>
	<p><input type="submit" value="single upload"></p>
</form>

在controller中处理,只需要将接受参数设为MultipartFile型即可。

@RequestMapping("doSingleUpload")
public String singleFileUpload(MultipartFile file, HttpServletRequest request) throws IllegalStateException, IOException {
	transferFile(file, request);
	return "upload";
	
}

private void transferFile(MultipartFile file, HttpServletRequest request) throws IOException {
	String originalFilename = file.getOriginalFilename();
	if (!originalFilename.isEmpty()) {
		File dest = new File(request.getSession().getServletContext().getRealPath("/") + "\\" + originalFilename);
		if(!dest.getParentFile().exists()) {
			dest.mkdir();
		}
		file.transferTo(dest);
		System.out.println(dest.getPath());
	}
}