问题记录:使用MultipartFile不上传文件出现异常

本文涉及的产品
小语种识别,小语种识别 200次/月
教育场景识别,教育场景识别 200次/月
文档理解,结构化解析 100页
简介: 问题记录:使用MultipartFile不上传文件出现异常

前言:在使用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

相关文章
|
前端开发
File和MultipartFile互相转化工具类
File和MultipartFile互相转化工具类
1021 0
|
11月前
|
Web App开发 XML Java
SpringMVC使用MultipartResolver和MultipartFile实现文件上传
SpringMVC使用MultipartResolver和MultipartFile实现文件上传
761 0
|
存储 安全 Java
解析 Java 的 MultipartFile 接口:实现文件上传的全面指南
在现代的 Web 开发中,文件上传是一个常见的需求,而 Java 中的 `MultipartFile` 接口正是用来处理这类任务的重要工具。无论是上传图片、音频、视频还是其他文件类型,`MultipartFile` 都提供了便捷的方法来处理文件的接收和存储。本文将带您深入探索 Java 中的 `MultipartFile` 接口,揭示其功能、用法以及在实际开发中的应用场景。
fetch上传文件报错的问题(multipart: NextPart: EOF)
技术栈 后台: gin(golang) 前端: react+antd+dva 问题 前端这边使用fetch发送http请求的时候,后端解析formData报错: multipart: NextPart: EOF 分析问题 原因是上传文件太小了Content-Length数量太小了,尝试将headers里这字段的value变大,发现实际的请求依然是较小值。
|
6天前
|
缓存 前端开发
后端MultipartFile接收文件转Base64
后端MultipartFile接收文件转Base64
27 0
|
5月前
|
Java 程序员 Spring
“解密Java文本读取:File与MultipartFile“
“解密Java文本读取:File与MultipartFile“
112 0
|
6月前
|
XML Java Maven
如何将MultipartFile转换为File
该文介绍了MultipartFile(Spring框架)与File(Java标准库)的区别,主要讨论了如何将MultipartFile转换为File的三种方法:使用`transferTo`、`FileOutputStream`和Java NIO,并提到了File转MultipartFile常用于测试,可通过MockMultipartFile实现。
218 0
|
6月前
|
Java
【Java报错】MultipartFile 类型文件上传 Current request is not a multipart request 问题处理(postman添加MultipartFile)
【Java报错】MultipartFile 类型文件上传 Current request is not a multipart request 问题处理(postman添加MultipartFile)
576 0
|
11月前
下载文件url为MultipartFile
下载文件url为MultipartFile
173 0
MultipartFile多文件上传/通过文件夹解析所有文件
MultipartFile多文件上传/通过文件夹解析所有文件
212 0