1、原因分析

问题:开发中遇到一个springboot的异常,Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/data/tmp],奇怪的是服务器上传没有任何问题,只有在我本地上传会报这个错

原因:从报错的信息来看是缺少 ‘/data/tmp’目录导致的

分析:因为我是mac电脑,没有权限在根目录下创建文件夹,所以会报这个错,而服务器上是root权限,可以自动去创建

2、解决方案

对此问题我也在网上找了几种方案:

2.1、增加配置文件指向临时目录

2.1.1、在application.yml文件中设置multipart location ,并重启项目

spring:
  servlet:
    multipart:
      location: /tmp/uploads

我看有的博客的配置是:

spring:
http:
multipart:
location: /data/upload_tmp

这个配置我使用了是没用的,因为application.yaml 中配置 Spring Boot 的 multipart 上传目录时,使用的是 spring.servlet.multipart.location。如果配置中是 spring.http.multipart.location,这会导致配置无法生效。

2.1.2 在application.yml文件中设置tomcat的临时文件目录

server
  tomcat:
     basedir: /tmp/tomcat

2.2 在配置文件添加bean

@Bean
public MultipartConfigElement multipartConfigElement() {
  MultipartConfigFactory factory = new MultipartConfigFactory();
  factory.setLocation("/tmp/tomcat");
  return factory.createMultipartConfig();
}

2.3 添加启动参数 -java.tmp.dir=/path/to/application/temp/,并重启

本人是用 2.1.1 方案解决的,因为可以在不改动代码以及启动配置文件实现。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐