@RestController
@RequestMapping("/v2")
public class TestController {
protected Logger logger = LoggerFactory.getLogger(this.getClass());
@PostMapping (value = "/file")
public void addFile(@RequestParam MultipartFile file) throws IOException {
String name = file.getName();
byte[] bytes = file.getBytes();
int length = bytes.length;
String originalFilename = file.getOriginalFilename();
String contentType = file.getContentType();
logger.info("getName:{}", name);
logger.info("bytes.length:{}", length);
logger.info("getOriginalFilename:{}",originalFilename);
logger.info("getContentType:{}",contentType);
}
}
一.问题描述:
在上传文件的时候,我在使用postman传文件的时候,明明什么都没有传,但是却还是能进入到下面的if判断中,很迷惑。
if(file !=null){
//执行操作
}
二.分析:
原因: 是因为请求头里多了一行Content-Type:multipart/form-data
,但是你请求不勾选Content-Type时,他后端就会报500错误。这一行的意思是Postman向后端指明,我传输的是文件类型的,当没有给后端传文件时。后端也还是会接收到一个文件,只不过这个文件是个空文件夹,所以在判断文件是否向后端传递的时候,不能单单判断文件是否为null,还需要判断文件的大小是否>0。
1.正常传文件
后端日志显示:
2.没有传文件
后端日志显示传过来的是一个空文件
3.不勾选Content-Type
后端报错:现在的请求不是一个文件传输请求
三.解决:
当你什么都不传的时候,file!=null,只不过他的文件大小为0,所以需要判断文件的大小才可以知道文件是否后端传
if(file!=null && file.size()>0 ){
//执行操作
}