0%

springmvc同时上传文件和body

springMvc上传文件的时候,我查找的资料都是上传单个文件,在url中传参
但是实际项目中使用最多的是json传参

springMvc的设计不允许同时使用requestbody requestparam这两个注解同时使用,所以也就只有自己去解析
上传文件时,是springMvc会将请求封装成StandardMultipartHttpServletRequest,也就是只要判断请求是否是这个StandardMultipartHttpServletRequest的实例就能判断是否含有文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void test(HttpServletRequest request)
InputStream file = null;
InputStream json = null;
if (request instanceof StandardMultipartHttpServletRequest) {
MultiValueMap<String, MultipartFile> fileMap = ((StandardMultipartHttpServletRequest) request).getMultiFileMap();
json = fileMap.get("json").get(0).getInputStream();
file = fileMap.get("file").get(0).getInputStream();
} else {
// 直接从body中取出json
json = request.getInputStream();
}
// 将输入流解析成字符串
BufferedReader reader = new BufferedReader(new InputStreamReader(json));
StringBuffer sb = new StringBuffer();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
logger.debug(sb.toString());
}

如果只含有json直接从输出流取然后转成字符串处理就行

如果含有文件转换成StandardMultipartHttpServletRequest在对输出流进行处理