在实际项目中,会有通过前端上传单个文件,甚至多个文件的请求.
本篇博客就会介绍后端如何实现这种类型的接口,以及如何使用postman去调用

文章目录

一. SpringBoot项目中使用MultipartFile上传单文件

1.1 场景一: 上传单个文件,不包含其它参数
1.1.1 后端实现, 在Controller层添加如下代码
1.1.2 postman接口调用
1.2 场景二: 上传单个文件,包含其它参数
1.2.1 java后台代码
1.2.2 postman接口调用
1.3 场景三: 上传单个文件,包含其它请求实体
1.3.1 后端实现
1.3.2 postman接口调用

二. SpringBoot项目中使用MultipartFile上传多文件

2.1 上传多个文件,不包含其它参数
2.1.1后端实现
2.1.2 postman接口调用
2.2 上传多个文件,包含其它参数
2.2.1 后端接口代码
2.2.2 postman接口调用
2.3 上传多个文件,包含其它请求体
2.3.1 后台代码
2.3.2 postman接口调用
2.4 复杂场景测试,既包含一个文件,也包含多个文件,同时包含参数和请求体
2.4.1后台代码
2.4.2 postman接口调用


一. SpringBoot项目中使用MultipartFile上传单文件
1.1 场景一: 上传单个文件,不包含其它参数
1.1.1 后端实现, 在Controller层添加如下代码

@RestController
@RequestMapping("/test")
public class MultipartFileController {
    @PostMapping
    public String multipartFileTest(@ApiParam(value = "multipartFile") @RequestParam MultipartFile multipartFile) throws Exception{
        File file = new File("E:\\data\\test\\testFile");
        multipartFile.transferTo(file);
        return file.getAbsolutePath();
    }
}

上述代码实现的主要功能是,接受接口调用传入的文件,转换为本地文件,并返回本地文件的绝对路径

1.1.2 postman接口调用
首先接口类型是Post, Headers里需要添加
key: Content-Type , value:multipart/form-data;


请求体里, 首先:
要选择from-data这种方式,key的格式设置为File,key的值为multipartFile(这里不唯一,实际情况根据后端定义的参数值名称来确定), 然后随便选择一个文件上传

在这里插入图片描述

调用接口,返回了生成文件的路径

在这里插入图片描述

在资源管理器查看这个文件内容和上传的文件一致


1.2 场景二: 上传单个文件,包含其它参数
1.2.1 java后台代码
后台代码,只需要通过@RequestParam指定接口调用的参数即可,没有特殊的地方 

@PostMapping
public String multipartFileTest(@ApiParam(value = "multipartFile") @RequestParam MultipartFile multipartFile, @ApiParam(value = "用户名") @RequestParam  String username,
@ApiParam(value = "邮箱") @RequestParam String email) throws Exception{
        File file = new File("E:\\data\\test\\testFile");
        multipartFile.transferTo(file);
        return "path: " + file.getAbsolutePath() + " username: " + username + " email: " + email;
    }

1.2.2 postman接口调用
在form-data里添加对应的参数即可,注意key的格式是默认的Text类型,
调用也是正常的


1.3 场景三: 上传单个文件,包含其它请求实体
1.3.1 后端实现
首先创建一个最简单的实体类 

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author xmr
 * @date 2022/4/17 10:51
 * @description
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserDO {
    private String username;
    private String email;
    private int age;
    private String address; 
}

crontroller代码,注意: 这里不要用常规的@RequestBody,访问接口的时候会报错Unsupported Media Type,而是应该使用@Valid注解,
在javax.validation包下,后台代码如下:

 @PostMapping
 public String multipartFileTest(@ApiParam(value = "multipartFile") @RequestParam MultipartFile multipartFile,@ApiParam(value = "用户名") @Valid UserDO userDO) throws Exception{
        File file = new File("E:\\data\\test\\testFile");
        multipartFile.transferTo(file);
        return  userDO.toString();
    }

1.3.2 postman接口调用
这里和常规的RequestBody也是有区别的,就是将实体类的每个属性值当做单独的key上传上来


二. SpringBoot项目中使用MultipartFile上传多文件
2.1 上传多个文件,不包含其它参数
2.1.1后端实现
为了更直观的展示,这里返回一个JSONObject对象, 输出每个文件的大小

@PostMapping
public JSONObject multipartFileTest(@ApiParam(value = "multipartFile") @RequestParam MultipartFile [] multipartFiles) throws Exception{
        JSONObject jsonObject = new JSONObject();
        for(int i = 0; i < multipartFiles.length; i++) {
            jsonObject.put("file" + i, multipartFiles[i].getSize());
        }

       return jsonObject;
    }

2.1.2 postman接口调用
这里有个特殊的地方,就是不管传多少文件,key首先是file类型,其次命名均为multipartFiles(同样,这里由后台接口命名时确定)我这里上传了4个正常文件和一个一个空的


最终接口返回结果:

在这里插入图片描述 

2.2 上传多个文件,包含其它参数
2.2.1 后端接口代码 

@PostMapping
public JSONObject multipartFileTest(@ApiParam(value = "multipartFile") @RequestParam MultipartFile [] multipartFiles,@RequestParam String username,@RequestParam int age) throws Exception{
        JSONObject jsonObject = new JSONObject();
        for(int i = 0; i < multipartFiles.length; i++) {
            jsonObject.put("file" + i, multipartFiles[i].getSize());
        }
        jsonObject.put("username", username);
        jsonObject.put("age", age);
       return jsonObject;
    }

2.2.2 postman接口调用
没什么特殊的地方,key增加对应的属性即可

在这里插入图片描述
2.3 上传多个文件,包含其它请求体
2.3.1 后台代码
同1.3 请求体需要使用@Valid注解而不是@RequestBody 

@PostMapping
public JSONObject multipartFileTest(@ApiParam(value = "multipartFile") @RequestParam MultipartFile [] multipartFiles,@Valid UserDO userDO) throws Exception{
        JSONObject jsonObject = new JSONObject();
        for(int i = 0; i < multipartFiles.length; i++) {
            jsonObject.put("file" + i, multipartFiles[i].getSize());
        }
        jsonObject.put("user", userDO.toString());
       return jsonObject;
    }

2.3.2 postman接口调用
在multipartFiles参数后面依次添加实体类里面的每一个属性值即可
如下图:

在这里插入图片描述
2.4 复杂场景测试,既包含一个文件,也包含多个文件,同时包含参数和请求体
2.4.1后台代码

@PostMapping
public JSONObject multipartFileTest(@ApiParam(value = "multipartFile") @RequestParam MultipartFile [] multipartFiles,@RequestParam MultipartFile multipartFile,@RequestParam String paramTest,@Valid UserDO userDO) throws Exception{
        JSONObject jsonObject = new JSONObject();
        for(int i = 0; i < multipartFiles.length; i++) {
            jsonObject.put("file" + i, multipartFiles[i].getSize());
        }
        jsonObject.put("user", userDO.toString());
        jsonObject.put("paramTest", paramTest);
        jsonObject.put("multipartFile", multipartFile.getSize());
       return jsonObject;
    }

2.4.2 postman接口调用
注意事项: 文件的上传key需要选择File格式,同时参数名应该与后端代码约定的保持一致,
对象依旧是把对象的每个属性单独作为参数

在这里插入图片描述
相信有了2.4这个案例, 项目中上传文件需求的任何场景应该都能够满足了

原文链接:https://blog.csdn.net/weixin_40861707/article/details/124225690

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐