spring mvc 使用的是 CommonsMultipartResolver,spring boot 默认使用的是 StandardServletMultipartResolver
如果从 spring mvc 切换到 spring boot,上传文件使用的是相对路径,StandardServletMultipartResolver 会将文件生成一个文件夹,造成在数据转换的时候获取不到上传文件。以下为 StandardServletMultipartResolver 写文件时的判断。
- public void write(String fileName) throws IOException {
- File file = new File(fileName);
- if (!file.isAbsolute()) {
- file = new File(this.location, fileName);
- }
-
- try {
- this.fileItem.write(file);
- } catch (Exception var4) {
- throw new IOException(var4);
- }
- }
-
如果需要继续使用默认的方式,则在配置文件中定义 location,并且修改之前的上传方法,改动会比较大。建议继续使用 CommonsMultipartResolver,添加 CommonsMultipartResolver,同时将默认的 multipart 的 enabled 设置为 false(如果两个同时开启,则默认的 multipart 会优先消费掉文件流,导致在 CommonsMultipartResolver 无法获取到文件)
- @Bean
- public MultipartResolver getMultipartResolver() {
- CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver();
- commonsMultipartResolver.setResolveLazily(true);
- commonsMultipartResolver.setDefaultEncoding("UTF-8");
- commonsMultipartResolver.setMaxInMemorySize(52428800);
- commonsMultipartResolver.setMaxUploadSize(52428800);
- return commonsMultipartResolver;
- }