千家信息网

SpringBoot文件上传临时目标被删除异常怎么处理

发表于:2024-10-21 作者:千家信息网编辑
千家信息网最后更新 2024年10月21日,这篇"SpringBoot文件上传临时目标被删除异常怎么处理"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下
千家信息网最后更新 2024年10月21日SpringBoot文件上传临时目标被删除异常怎么处理

这篇"SpringBoot文件上传临时目标被删除异常怎么处理"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"SpringBoot文件上传临时目标被删除异常怎么处理"文章吧。

1、业务背景

我们使用了SpringCloud 进行项目开发,其中一个主要服务(涉及到图片上传)的SpringBoot微服务在测试环境之中。因为此项目已经上线,很长一段时未针对此项目间做相关布更改和打包发。

由于最近此项目业务甲方需要新增部分功能。但是测试在上传课程时候,需要上传课程封面,发现上传课程封面的图片上传接口报错500啦。

本人在后端日志目录之中也无法查找到报错信息。仅仅只有前后端分离的前端调用接口的时候返回一个如下错误提示

Could not parse multipart servlet request;
nested exception is java.io.IOException:
The temporary upload location [/tmp/tomcat/ocalhost/ROOT] is not valid

最后我根据错误提示搜索一下,结果发现是tomcat的临时目录被删除了。最后找到一篇文章说得比较清楚有如下几点:

(1)、SpringBoot项目启动后,系统默认会在 /tmp 目录下自动创建如下三个目录

  • hsperfdata_root,

  • tomcat.************.8080,(结尾是项目的端后)

  • tomcat-docbase.*********.8080

(2)、Multipart(form-data)的方式处理请求时,默认就是在第二个目录下创建临时文件的

(3)、CentOS7 定时清理临时文件目录

/tmp目录的清理规则主要取决于/usr/lib/tmpfiles.d/tmp.conf文件的设定,默认的配置内容为:

# Clear tmp directories separately, to make them easier to overridev /tmp 1777 root root 10d           #   清理/tmp下10天前的目录和文件v /var/tmp 1777 root root 30d       #   清理/var/tmp下30天前的目录和文件

依据以上几条情况,可以看得出我们上传文件的临时目录,在CentOS7之中,会每10天进行定时清理掉。

于是就出现了文章开始出所说的出现上传文件的临时目录不存在,于是上传问题报错500的问题啦。我的同事说了一句启动某个微服务还特定说了一句启动网关服务就可以了。

话有说回来,启动任何一个SpringBoot的微服务都可以实现上传(因为启动任何一个本机的微服务将生成对应的临时目录)。最后启动了一个微服务,结果确实可以上传啦。

我不希望只要问题解决了就,浅尝辄止的解决问题就了事啦。最后根据搜索到的文章和分析,个人认为有如下三种解决方案。

2、三种解决方案

2.1、直接修改CentOS清理临时目则录规

直接暴力指定不清楚所有临时目录,精细化管理针对上传文件tomcat目录不进行清除。

/tmp目录的清理规则主要取决于/usr/lib/tmpfiles.d/tmp.conf文件的设定:

我们可以配置这个文件,比如你不想让系统自动清理/tmp下以tomcat开头的目录,那么增加下面这条内容到配置文件中即可:

x /tmp/tomcat.*

2.2、通过SpringBoot启动配置注解(@Configuration) 指定自有上传文件目录

改变临时文件的存储路径,指定自定义非CentOS7的系统默认临时目录,这样就可以避免系统在定时清除临时目录的情况。实现代码如下

@Configurationpublic class MultipartConfig {     /**     * 文件上传临时路径     */    @Bean    MultipartConfigElement multipartConfigElement() {        MultipartConfigFactory factory = new MultipartConfigFactory();        String location = System.getProperty("user.dir") + "/data/upload/tmp";        File tmpFile = new File(location);        if (!tmpFile.exists()) {            tmpFile.mkdirs();        }        factory.setLocation(location);        return factory.createMultipartConfig();    }}

2.3、原理类似第二种方案,但是在SpringBoot的配置之中设定Profile信息

在propertites/yaml文件中配置: spring.http.multipart.location= 你的缓存文件路径

spring.mvc.static-path-pattern=/upload/**spring.http.multipart.max-file-size=10MB#指定上传文件临时目录spring.http.multipart.location=/opt/data/upload

3、成果展现

4、总结

我们在遇见问题了,可能仅仅看见表面上问题已经解决了。但是作为技术,应该深究是什么原因导致的。在此也很感谢互联网,让很多大神能够分享自己发现的问题和解决方案。同时也说明了其中的原理,这样有助于从根源解决问题。

SpringBoot文件上传遇到的问题及解决

一:代码报错

Could not parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [D:xyqbtestworkTomcatlocalhostxyqb fsmarvels-core-v2] is not valid

解决方案:

在springboot中上传文件没有临时目录所以会报以上错误,需要在application配置文件中指定临时文件目录

server.tomcat.basedir=文件路径

如果配置了spring.http.multipart.location=文件路径,需要加上该路径。

创建一个类,里面包含以下方法:

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

重启即可生效。

二:代码报错

Failed to convert value of type "org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile" to required type "org.springframework.web.multipart.commons.CommonsMultipartFile"; nested exception is java.lang.IllegalStateException: Cannot convert value of type "org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile" to required type "org.springframework.web.multipart.commons.CommonsMultipartFile": no matching editors or conversion strategy found

解决方案:

在springmvc中接收文件使用的是CommonsMultipartFile,springboot使用的是MultipartFile。

换下即可成功。

以上就是关于"SpringBoot文件上传临时目标被删除异常怎么处理"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

文件 目录 问题 配置 内容 服务 方案 项目 解决方案 路径 处理 之中 文章 系统 目标 代码 篇文章 课程 错误 清楚 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全黑板报文字素材 启迪控股 国家网络安全 奇安信圆满完成北京冬奥会网络安全保障任务 银川安全运维网络安全 平谷区先进软件开发要求 厦门软件开发工程工作 自建服务器带宽价格 互联网行业安卓软件开发 互联网网络技术管理 教育管理软件开发 nas如何存储服务器 芜湖春天网络技术 数据库技术及应用实验是什么 白城市网络安全监测大队 网络安全管理课程心得体会 直销管理系统怎么清除数据库 把多台服务器迁移合并 学软件开发和工程造价哪个好 大连软件开发的培训机构 白银区法院网络安全 武汉华为网络技术培训学校 圈娱网络技术 天水讯捷网络技术有限公司 广电网络安全等级划分 网络安全用日文怎么说 芜湖春天网络技术 互联网科技公司有政策补贴吗 无线路由改装wifi打印服务器 服务器如何打开日志 网络技术公司成本领先战略
0