spring boot 文件上传与其他属性一起上传
DAO定义
需要用到lombok组件自动生成setter、getter方法
import lombok.Data;
import org.springframework.web.multipart.MultipartFile;
@Data
public class AgentInfoTest {
private String agentName;
private String agentPhone;
private MultipartFile blFile;
}
controller上传文件代码:
@Api(value = "测试文件上传")
@Slf4j
@RestController
@RequestMapping("api/test")
public class TestController {
@ApiOperation(value = "测试文件与其他属性一起上传")
@PostMapping(value="test")
public void test(AgentInfoTest condig) throws Exception{
MultipartFile blFile = condig.getBlFile();
if(!blFile.isEmpty()){
File newFile = new File("D:\\" + blFile.getOriginalFilename());
// 存储上传文件
blFile.transferTo(newFile);
}
}
}
注意:这里定义的对象作为参数的时候不能标注@RequestBody,类似如下
public void test(@RequestBody AgentInfoTest condig) throws Exception
如果标记会出现如下异常
系统内部异常:Content type 'multipart/form-data;charset=UTF-8;boundary=WebAppBoundary' not supported"
application.yml配置
spring:
# spring boot高版本: 2.X(低版本: 1.X 为spring.http.multipart)
servlet:
multipart:
# 单个文件上传的大小限制(默认1M)
max-file-size: 2MB
# 请求上传文件接口总共上传文件大小的限制
max-request-size: 20M
rest client 测试文件上传
代码如下:
###
POST {{baseurl}}/api/test
Accept: application/json
Content-Type: multipart/form-data; charset=UTF-8; boundary=WebAppBoundary
Authentication:{{Authentication}}
--WebAppBoundary
Content-Disposition: form-data; name="agentName"
Content-Type: application/json
张三
--WebAppBoundary
Content-Disposition: form-data; name="agentPhone"
Content-Type: application/json
lisi
--WebAppBoundary
Content-Disposition: form-data; name="blFile"; filename="%E5%BE%80_20201215142015.png"
Content-Type: application/octet-stream; charset=UTF-8
< D:\微信图片_20201215142015.png
--WebAppBoundary--
其中boundary=WebAppBoundary一定要写,WebAppBoundary可以自定义。
第一个--WebAppBoundary不要有参数信息(既前面是空)。
结尾用--WebAppBoundary-- 标识输入完成。
baseurl 和 Authentication 在配置文件中配置。