一.多文件上传
首先,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());
}
}