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

不是Apache Spark

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) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值