SpringBoot中获取所有的上传文件

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都拿捏不稳了 :joy:

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);
		
	}
}