Java文件上传同时携带参数

上传文件与参数两种方法
本文介绍了通过Spring框架实现文件上传同时传递业务参数的两种方式。第一种方式使用MultipartFile接收文件并配合普通Java对象传递参数;第二种方式利用MultipartHttpServletRequest获取文件及参数。

两种方法,第一种
接口直接写两个对象,一个是MultipartFile,一个是你自己定义的java的参数对象,如下

@PostMapping("/uploadDicomZip")
    public void uploadDicomZip(
    @RequestParam(value = "file") MultipartFile file, 
    AITaskDto aiTaskDto) {
    // TODO 做你自己的事。
    }

postman 上传的时候 将java 传输对象平铺开,上传的时候像这样:

在这里插入图片描述
注意:
1、postman 中的 file 和接口中的@RequestParam(value = “file”) value值一致
如果没有 @RequestParam(value = “file”) 的话 则postman的key应该和MultipartFile 的形参名称一致。这点应该不用多解释了。不写@RequestParam(value = “file”) 也是可以获取到文件的(key和形参名称一致)。
2、记得AITaskDto 前面**【不要】**加 @RequestBody 注解。

这样就能既传文件 又携带参数了。

第二种方法就是利用 MultipartHttpServletRequest 这个参数

@PostMapping("/uploadDicomZip")
    public void uploadDicomZip(MultipartHttpServletRequest request) {
    MultipartFile file = request.getFile("file"); 
    String json = request.getParameter("aiTaskDto"); //前端传的时候是 key value的形式 key就aiTaskDto,value就是java对象的json字符串
    //再将json 转成java对象
    AITaskDto aiTaskDto = JSONObject.parseObject(json, AITaskDto.class);
    //文件和参数对象都拿到了就可以 做你自己的事。
    
    }

postman的请求如下:
在这里插入图片描述
第二种方法请参考 https://blog.youkuaiyun.com/weixin_45511144/article/details/119038670

Java 后台实现多文件上传并接收其他参数,可借助 Spring MVC 达成。以 Controller 层为例,定义一个接收多文件其他参数的方法,代码如下: ```java import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import java.util.Map; @RestController public class FileUploadController { @PostMapping("/receiveFiles") public ResponseBean receiveFiles(@RequestParam("files") MultipartFile[] files, @RequestParam("param1") String param1, @RequestParam("param2") String param2, @RequestParam("param3") String[] param3) { Map<String, Object> result = testImpl.receiveFiles(files, param1, param2, param3); return new ResponseBean(result); } } ``` 在上述代码里,`@PostMapping("/receiveFiles")` 表明这是一个处理 POST 请求的方法,路径为 `/receiveFiles`。`@RequestParam` 注解用于接收请求中的参数,`MultipartFile[] files` 用于接收多个文件,`String param1`、`String param2` `String[] param3` 用于接收其他类型的参数。之后会调用 `testImpl.receiveFiles` 方法来处理接收到的文件参数,并将结果封装在 `ResponseBean` 里返回 [^1]。 对于文件的处理,可参考以下代码将接收到的文件保存到指定路径: ```java import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; public class FileUploadService { public void saveFiles(MultipartFile[] files, HttpServletRequest request) throws IOException { for (MultipartFile file : files) { String fileName = file.getOriginalFilename(); String path = request.getServletContext().getRealPath("/upload/excel"); FileOutputStream fos = FileUtils.openOutputStream(new File(path + "/" + fileName)); IOUtils.copy(file.getInputStream(), fos); fos.close(); } } } ``` 在这个方法中,会遍历接收到的文件数组,获取每个文件的原始文件名,接着获取指定文件夹在工程中的真实路径,然后将文件转成二进制流并写入到指定路径的文件中 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值