标签:文件 MultipartFile return 接口 出现异常 file null 上传
前言:在使用Spring项目构建项目时,文件上传基本都是使用MultipartFile来获取的,但是若是不上传这个文件,或者不传就会导致将文件转化为MultipartFile类型时出错,最近开发的一个接口就是这种情况,提了接口测试,测试说不上传文件会报错,然后就必须得改,因为是为其他系统提供的服务支持,前后端一起提测的,所以接口单独测,这样就过不去,下面记录下这个坑,以后肯定还会碰到。
错误示例
下面先展示下错误的写法,这种写法应该是大家最为常用的了,使用参数绑定的方式直接将file文件转化为MultipartFile类型,然后操作,但是若是前端不传或者使用postman、jmeter等测试工具不上传文件时就会出错,这个出错是文件转化时就错了,还没到程序里面,那怎么办呢?
@PostMapping("/ocr")
public String syncRestOcr(@RequestParam("file") MultipartFile file) {
/** Check file type */
if (file == null || file.isEmpty()) {
log.error("####***接口服务--OCR接口: 文件为空!");
return returnAndClear(new ResultDTO(ExceptionEnum.PARAMS_NULL_30.getResultCode()), null, null);
}
/** Upload service and return resultDTO */
if (!checkSuffix(file.getOriginalFilename())) {
log.error("####***接口服务--OCR接口: 文件拓展名检测失败!");
return returnAndClear(new ResultDTO(ExceptionEnum.SYSTEM_FILE_SUFFIX_TYPE_ERR.getResultCode()), null, null);
}
}
我们可以不使用参数绑定,直接接收HttpServetRequest 然后判断参数存在再转化为MutlipartFile类型,正确代码如下所示,这样就不会存在不上传文件时报异常了,我们就可以手动获取到这些异常场景来直接提示调用者。
@PostMapping("/ocr")
public String OCR(HttpServletRequest request){
log.info("##### ***接口服务--OCR接口执行开始 #####");
MultipartFile file;
if(ServletFileUpload.isMultipartContent(request))//判断参数是否是文件类型
file = WebUtils.getNativeRequest(request, MultipartHttpServletRequest.class).getFile("file");//从request中拿file的值转化为MultipartFile
else
return returnAndClear((new ResultDTO(ExceptionEnum.COMMON_ERROR_30.getResultCode(),null,"请上传图片格式的文件(支持jpg、png)")),null,null);
/** Check file type */
if (file == null || file.isEmpty()) {
log.error("####***接口服务--OCR接口: 文件为空!");
return returnAndClear(new ResultDTO(ExceptionEnum.PARAMS_NULL_30.getResultCode()), null, null);
}
/** Upload service and return resultDTO */
if (!checkSuffix(file.getOriginalFilename())) {
log.error("####***接口服务--OCR接口: 文件拓展名检测失败!");
return returnAndClear(new ResultDTO(ExceptionEnum.SYSTEM_FILE_SUFFIX_TYPE_ERR.getResultCode()), null, null);
}
参考:https://blog.csdn.net/tian__kong/article/details/106791494
标签:文件,MultipartFile,return,接口,出现异常,file,null,上传
来源: https://blog.csdn.net/m0_46897923/article/details/118568215
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。