日常问题:上传接口报错

日常问题:上传接口报错

项目启动后,一段时间没怎么用之后,系统所有上传接口都失败,报错为接口异常。

这个问题通常不会出现的,因为正常情况下使用,不可能会有7天不进行文件上传操作的。

因为财务上传报表是每个工作日的啊 ╮(╯_╰)╭

结果碰到了国庆春节长假,还有今年疫情的超级长假。然后就炸了 ε=(´ο`*)))唉


问题

Springboot上传文件错误:org.springframework.web.multipart.MultipartException
....
org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.8514542127953693245.8091/work/Tomcat/localhost/ROOT] is not valid
....

原因

linux系统会定期(10天)清除tmp目录下没有使用过的文件,springBoot启动的时候会在/tmp目录下生成一个tomcat.****.port(tomcat.8514542127953693245.8091)的文件目录,此目录要是清除后,就是出现上传文件错误!

具体清除脚本详情:

从/var/log/cron 日志中发现,服务器除了调用用户的计划任务外,还会执行系统自己的.

进入 /etc/cron.daily , 可以看到一个tmpwatch

里面调用了/usr/sbin/tmpwatch 脚本 参数为240 =10*24 =10天

解决

第一种临时方法,万能的重启。临时文件会重新生成。

第二种方法,重启,并且调整系统清理的时长,把上文原因中提到的脚本时间延长到100+天。【要是几百天都不用的系统,也就不用维护啦 罒ω罒】

第三种方法,项目配置Bean,提供临时文件目录

    @Bean
    public MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        //单个文件最大
        factory.setMaxFileSize("10240KB");
        /// 设置总上传数据总大小
        factory.setMaxRequestSize("102400KB");
        // 这种写法在linux下是没问题的,但是开发windows上会找不到目录
        // factory.setLocation("/var/tmp");
        // 由于默认/tmp 临时目录下 Linux 会清理7天无操作目录,所以换个上传目录试试
        String location = System.getProperty("user.home") + "/data/tmp";
        File tmpFile = new File(location);
        if (!tmpFile.exists()) {
            tmpFile.mkdirs();
        }
        factory.setLocation(location);
        return factory.createMultipartConfig();
    }

参考文档

就这个了,很详细的:https://blog.csdn.net/liuxiaoming1109/article/details/93467180

这个是linux下文件自动删除的文章:https://www.tuicool.com/articles/6Jj6rq


小杭 2020-02-19 (:з」∠)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小_杭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值