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();
}
}
如果遇到其他问题.请留言一起交流解决.帮助完善文章.由于本人水平有限,难免出现错误,请不吝赐教.