springboot中文件上传大家都是这么写:
@PostMapping(path = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public void upload(@RequestParam("file1") MultipartFile file1,
@RequestParam("file2") MultipartFile file2) throws IOException, ServletException {
很显然,这种情况这是在知道客户端上传文件的数量,以及表单名称的情况下,的写法。
对于不知道客户端要上传多少文件,文件表单名称是啥的情况下,想要遍历所有上传文件,可以使用原生的Servlet api完成。(我觉得好像很多人spring用多了,连基本的Servlet都拿捏不稳了 )
Servlet3 提供了一个新的接口:Part
这个接口封装了Multipart请求体信息。使用方法如下:
@PostMapping(path = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public void upload(HttpServletRequest request) throws IOException, ServletException {
Collection<Part> parts = request.getParts(); // 获取所有上传的文件
for (Part part : parts) {
// 类型
String contentType = part.getContentType();
// 表单名称
String name = part.getName();
// 文件名称
String fileName = part.getSubmittedFileName();
// 文件大小
long size = part.getSize();
log.info("contentType={}, name={}, fileName={}, size={}", contentType, name, fileName, size);
// 读取body
try(InputStream inputStream = part.getInputStream()){
// 也可以直接写入道指定的文件
// part.write(String fileName);
// 其他的一些方法
// part.getHeader(String name);
// part.getHeaderNames();
// part.getHeaders(String name);