sprak框架上传文件时对其他参数的处理以及springboot框架的处理操作

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

1.spark上传文件
post请求,Content-Type为multipart/form-data,文件对应的参数名为file_data

post("/OaUpload", (req, res) -> {
            HashMap<String, Object> result = new HashMap<>();
            req.attribute("org.eclipse.jetty.multipartConfig", new MultipartConfigElement("/temp"));
            try (InputStream is = req.raw().getPart("file_data").getInputStream()) {
                BufferedInputStream in = new BufferedInputStream(is);
                //获取到文件流后的操作
               ...
            }
            result.put("returnCode", 0);
            return JSONObject.toJSON(result);
        });

那么如果需要传其他参数怎么办,比如传一个uid以便后台处理。
multipart/form-data请求方式是以二进制数据的形式传输,所以通过流的方式读取uid然后转为string就能获取该字段。

import org.apache.commons.io.IOUtils;
...
req.attribute("org.eclipse.jetty.multipartConfig", new MultipartConfigElement("/temp"));
//multipart/form-data请求获取其他参数需要二进制流转string
Part uidPart = req.raw().getPart("uid");
String uid = IOUtils.toString(uidPart.getInputStream());
...

2.springboot上传时其他参数的解析
在springboot中,我们只要这样写就能获取到其他参数name

@PostMapping("upload")
public Map<String, Object> uploadFile(MultipartFile upFile, String name) {
...
}

解析源码,看下spring的处理过程:

2.1 springboot版本这边是1.5.2
在这里插入图片描述
2.2 请求过程
请求正式进入Servlet中后,会走到DispatcherServlet,然后走其中的doService方法,然后走到doDispatch方法
在这里插入图片描述
然后走checkMultipart对请求参数upFile的处理
doDispatch方法往下有一行代码:

mv = ha.handle(processedRequest, response, mappedHandler.getHandler());

这边是将非Multipart参数的处理
在这里插入图片描述
一直往里走到getMethodArgumentValues,这边就已经获取到其他参数name的值
doDispatch的handle方法执行完后,可以发现processedRequest中已经解析完MultipartFile和name两个参数
在这里插入图片描述
在这里插入图片描述
所以在post方法中可以直接获取到name参数

uploadFile(MultipartFile upFile, String name) 

猜你喜欢

转载自blog.csdn.net/qq_39089503/article/details/93849969