java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > java临时目录找不到

java临时目录找不到问题分析及解决过程

作者:骑猪少年

文章主要内容是关于解决Java项目中临时目录找不到的问题,提供了两种解决方案:在配置文件中设置临时目录路径或在启动脚本中指定临时目录,这两种方法都能避免系统自动删除临时目录导致的文件上传错误

java临时目录找不到问题解决

报错示例

org.springframework.web.multipart.MultipartException: Could not parse multipart servlet
request;nested exception is java.io.IOException: The temporary upload location
[/tmp/tomcat.1337767218595042057.80/work/Tomcat/localhost/ROOT] is not valid
org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.parseRequest(StandardMultipart
HttpServletRequest.java:112) org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.

报错原因

java项目启动时,会在系统中创建一个临时目录,

C:\Users\用户名\AppData\Local\Temp\
/tmp

此目录,在未使用10天后将被系统删除(如10天内没有任何文件上传)

文件上传过程中,所有文件会临时保存在此目录中,当需要处理时会从此目录中读取

若此文件夹或文件不存在会报以上错误,一般将项目关闭重新启动即可解决,但是只是临时解决,在此给出两个解决方案:

注意:两方案二选一,全部选择有可能导致系统无法启动

方案一:

一般用于接触不到服务器或对linux命令不熟悉的开发者

首先在yml配置文件中添加multipart.location目录地址:

spring:
  servlet:
    multipart:
      # 指定自定义上传目录
      location: /mnt/tmp

然后添加config配置文件:

@Configuration
public class MultipartConfig {

    @Value("${spring.servlet.multipart.location}")
    private String fileTempDir;

    @Bean
    MultipartConfigElement multipartConfigElement() {
        String os = System.getProperty("os.name");
        // 兼容windows
        if(os.toLowerCase().startsWith("win")){
            fileTempDir = "C:" + fileTempDir;
        }
        log.info("fileTempDir:{}", fileTempDir);
        MultipartConfigFactory factory = new MultipartConfigFactory();
        File tmpDirFile = new File(fileTempDir);
        // 判断文件夹是否存在
        if (!tmpDirFile.exists()) {
            //创建文件夹
            boolean mkdirSuccess = tmpDirFile.mkdirs();
            log.info("create temp dir,result:{}", mkdirSuccess);
        }
        factory.setLocation(fileTempDir);
        return factory.createMultipartConfig();
    }
}

配置测试:

在项目启动日志中寻找:

 com.xx.config.MultipartConfig - fileTempDir:C:/mnt/tmp

代表配置成功

方案二:

在项目启动脚本或启动命令中加入以下命令

-Djava.io.tmpdir=/mnt/temp

总结

1.切记两方案选其一

2.以上方案实行后,可查看设定的目录是否自动创建成功,若目录找不到或不存在,可详细检查配置信息,确保项目信息无误可手动创建目录

3.两者原理相同,都是配置了文件的临时存储目录,此目录和其他系统目录一致,属于用户自己控制,不会因特殊原因被系统删除,此乃长久之计

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文