做项目时遇到的一个小问题,在此做个记录。controller的接口中有multipartFile类型的参数,这样在接收参数时可以直接操作文件。但是如果调用此方法时并未上传文件,springmvc在接收数据时,就会抛出异常:
org.springframework.web.multipart.MultipartException:
The current request is not a multipart request
为了能灵活处理请求,做到是否上传了文件都能请求方法,在参数中将multipartFile类型参数换成HttpServletRequest 参数,判断request是否是multipart请求,如果是,再从请求中获取文件,方法如下:
MultipartFile file = null;
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart){
MultipartHttpServletRequest multipartRequest =
WebUtils.getNativeRequest(request,MultipartHttpServletRequest.class);
file = multipartRequest.getFile("file");
}
上面的方法是在单文件上传,文件类型数据的“key值”为“file”时的接收,这里的“file”可以改为其他键值。如果是多文件上传,我们可以使用如下方法接收:
// 获取文件map集合
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
// 循环遍历,取出单个文件
for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
// 获取单个文件
MultipartFile mf = entity.getValue();
// 获得原始文件名
String fileName = mf.getOriginalFilename();
System.out.println(fileName);
}
其实是multipartRequest.getFile(“file”)这个获取单文件方法改成了multipartRequest.getFileMap()获取map集合,然后遍历集合,处理文件数据;