springboot内嵌tomcat文件上传路径不存在问题原因

错误提示:

springboot内嵌tomcat文件上传路径不存在问题原因_第1张图片

 临时文件目录被删除,导致文件上传报错,我们使用的是linux系统,10天没有使用,就会被删除

代码: 

 

 

解决办法:

        配置文件中自定义临时文件上传目录

server:
  port: 9090
  tomcat:
    basedir: /crm/tmp

特殊情况:

        当我上传小文件的时候可以上传成功,大文件的时候上传失败

        猜测可能是小文件没有使用临时文件,大文件上传的时候才使用了临时文件,但是这个边界值是在那里控制的呢??

分析整个请求流程:

        tomcat接收到请求  ->  调用springmvc的DispacherServlet -> doDispatch方法里面回去处理文件

问题根本原因:

        这不是tomcat的问题, 而是我们去解析请求中的文件的时候出现的问题;

源码流程:

DispatchServlet.class

springboot内嵌tomcat文件上传路径不存在问题原因_第2张图片

文件解析器去处理,

如果spring中没有注册该bean, 这里的multipartResolver对象就是null,就会直接返回request

springboot内嵌tomcat文件上传路径不存在问题原因_第3张图片

就会调用到CommonsMultipartResolver.class的方法中来

springboot内嵌tomcat文件上传路径不存在问题原因_第4张图片

这里就使用了fileUpload.parseRequest(request); 重点就在这里面

springboot内嵌tomcat文件上传路径不存在问题原因_第5张图片

划重点了:

这里使用的是DiskFileItemFactory工厂

springboot内嵌tomcat文件上传路径不存在问题原因_第6张图片

springboot内嵌tomcat文件上传路径不存在问题原因_第7张图片

DiskFileItemFactory工厂 里面有个sizeThreshold,

this.sizeThreshold = 10240;

springboot内嵌tomcat文件上传路径不存在问题原因_第8张图片

注释翻译成中文就是 :

默认阈值,超过该阈值上传内容将存储在磁盘上。

所以当文件超过10k的时候就会使用临时文件了,这也就是为啥临时目录被删除之后,我们上面会出现小文件可以成功上传,大文件上传报错的原因

springboot内嵌tomcat文件上传路径不存在问题原因_第9张图片

注释翻译 :

阈值,以字节为单位,低于该阈值,文件将保留在内存中,高于该阈值,它们将作为文件存储。

springboot内嵌tomcat文件上传路径不存在问题原因_第10张图片

所以根本原因在这里

你可能感兴趣的:(spring,java,tomcat,spring,boot,linux,服务器)