SpringBoot 使用 MultipartFile 上传文件及可能遇到的错误排查

您所在的位置:网站首页 java接收上传的文件 SpringBoot 使用 MultipartFile 上传文件及可能遇到的错误排查

SpringBoot 使用 MultipartFile 上传文件及可能遇到的错误排查

2023-11-22 09:24| 来源: 网络整理| 查看: 265

SpringBoot2.1.3,Maven,JDK1.8

首先贴上基本代码,然后一一排查可能遇到的问题.

@RestController @RequestMapping(value = "load") public class FileLoad { /** * 接收到的文件根据自己的业务需求进行处理. * * @param file 将要上传的文件 * @return java.lang.String 上传后的文件名称 */ @PostMapping(value = "/up") public String upLoadFile(@RequestParam("file") MultipartFile file) { // 原文件名 String oldFileName = file.getOriginalFilename(); if (StringUtils.isBlank(oldFileName)) { return "没有接收到文件"; } // 文件后缀名 String suffixName = oldFileName.substring(oldFileName.lastIndexOf(".")); // 上传后的存储路径 String filePath = "/my/dir/"; // 新文件名 String newFileName = UUID.randomUUID().toString().replace("-", "") + suffixName; try (FileOutputStream fileOutputStream = new FileOutputStream(filePath + newFileName)) { fileOutputStream.write(file.getBytes()); fileOutputStream.flush(); } catch (IOException e) { return "文件上传失败"; } return newFileName; } }

 

问题一:

org.springframework.web.multipart.MultipartException: Current request is not a multipart request

前端的 Content-Type 需要设置 multipart/form-data; 

问题二:

Required request part 'file' is not present

请求参数 file 不存在或名称错误,核对参数即可.如果参数 file 不是必传的,当不传时同样会报这个错误,只需要在修改

(@RequestParam(value = "file", required = false)就可以. required 的默认值为 true ,即必传.

问题三:

org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field files exceeds its maximum permitted size of 1048576 bytes.

请求上传的文件大小超过默认最大值 1048576byte(1Mb),解决的方式有两种:

3.1 解决方法一,***.yml 文件中添加配置,使用 ***.properties 修改为对应的即可.

 

spring: servlet: multipart: max-file-size: 7MB # 单个文件最大值 max-request-size: 14MB # 总上传文件最大和值 enabled: true

3.2 解决方式二, 新建配置文件 MultipartFileConfig

import org.springframework.boot.web.servlet.MultipartConfigFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.util.unit.DataSize; import javax.servlet.MultipartConfigElement; /** * @author YoonaLt * @date 2020-07-13 */ @Configuration public class MultipartFileConfig { @Bean public MultipartConfigElement multipartConfigElement() { MultipartConfigFactory factory = new MultipartConfigFactory(); // 单个数据最大值 7Mb, 原方法 setMaxFileSize(long maxFileSize) 已经过期,建议使用 setMaxFileSize(DataSize maxFileSize) factory.setMaxFileSize(DataSize.ofBytes(1024 * 1024 * 7L)); /// 总上传数据最大值 14M, 同将 setMaxRequestSize(long maxRequestSize) 方法替换为 setMaxRequestSize(DataSize maxRequestSize) factory.setMaxRequestSize(DataSize.ofBytes(1024 * 1024 * 14L)); // DataSize 方法属性配置建议自行查看源码 return factory.createMultipartConfig(); } }

 

如果遇到其他问题.请留言一起交流解决.帮助完善文章.由于本人水平有限,难免出现错误,请不吝赐教.



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3