在之前都只是进行了单一的文件上传,但是在很多的情况下是有可能要传递有多个文件的,所以这个时候首先要
解决的问题是表单里面需要有多个上传的项,而后在控制器上再进行一些简单的处理器即可
1、修改上传表单:
upload_page.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>SpringBoot模板渲染</title>
<link rel="icon" type="image/x-icon" href="/images/favicon.ico" />
<meta http-equiv="Content-Type" content="text/html;charse=UTF-8">
</head>
<body>
<form th:action="@{/upload}" method="post" enctype="multipart/form-data">
姓名:<input type="text" name="name"><br>
照片:<input type="file" name="photo"><br>
照片:<input type="file" name="photo"><br>
照片:<input type="file" name="photo"><br>
<input type="submit" value="上传">
</form>
</body>
</html>
2、修改控制器之中的参数接收,这个地方需要一点点特殊处理;
package com.microboot.controller;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
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.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import com.microboot.util.controller.AbstractBaseController;
@Controller
public class UploadController extends AbstractBaseController{
@RequestMapping(value = "/uploadPre", method = RequestMethod.GET)
public String uploadPre() {
return "upload_page";
}
@RequestMapping(value = "/upload", method = RequestMethod.POST)
@ResponseBody
public String upload(String name,HttpServletRequest request) {
// 如果你现在是MultipartHttpServletRequest的一个对象
if(request instanceof MultipartHttpServletRequest) {
MultipartHttpServletRequest mrequest = (MultipartHttpServletRequest)request;
List<MultipartFile> files = mrequest.getFiles("photo");
Iterator<MultipartFile> iter = files.iterator();
while(iter.hasNext()) {
MultipartFile photo = iter.next();
// 现在有文件上传
if(photo!=null) {
System.out.println("【*** 文件上传 ***】 name=" + name);
System.out.println("【*** 文件上传 ***】 photoName="
+ photo.getName());
System.out.println("【*** 文件上传 ***】 photoContentType="
+ photo.getContentType());
System.out.println("【*** 文件上传 ***】 photoSize="
+ photo.getSize());
try {
photo.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
return "upload_file";
}
}
多个上传文件的信息要通过Spring包裹的Request对象获得.