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

9 篇文章 0 订阅

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();
    }
}

 

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

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值