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

news/2024/7/4 11:50:17

错误提示:

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

代码: 

 

 

解决办法:

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

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

特殊情况:

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

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

分析整个请求流程:

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

问题根本原因:

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

源码流程:

DispatchServlet.class

文件解析器去处理,

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

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

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

划重点了:

这里使用的是DiskFileItemFactory工厂

DiskFileItemFactory工厂 里面有个sizeThreshold,

this.sizeThreshold = 10240;

注释翻译成中文就是 :

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

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

注释翻译 :

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

所以根本原因在这里


http://lihuaxi.xjx100.cn/news/1103429.html

相关文章

《ChatGPT Prompt Engineering for Developers》课程-提示词原则

编写 Prompt 的原则 本章的主要内容为编写 Prompt 的原则,在本章中,我们将给出两个编写 Prompt 的原则与一些相关的策略,你将练习基于这两个原则来编写有效的 Prompt,从而便捷而有效地使用 LLM。 一、环境配置 本教程使用 Open…

Mybatis动态SQL用法

动态SQL是Mybatis的一大重要特性,它可以完成不同条件下的SQL拼接,降低了因为SQL语句书写中的小错误而造成程序报错的概率,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号,利用动态SQL就可…

B-Tree B-树 代码介绍-20230505(C语言)

B-Tree B-树 代码介绍-20230505(C语言) 前言 前面已经介绍B-树属于多路查找树,它在数据库和文件储存系统设计中有着广泛的应用,B-Tree的基本操作包含查询、插入和删除等基本操作,由于这些操作过程中,B-树必须恪守其基…

信奥一本通1242

1242:网线主管 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 25297 通过数: 6122 【题目描述】 仙境的居民们决定举办一场程序设计区域赛。裁判委员会完全由自愿组成,他们承诺要组织一次史上最公正的比赛。他们决定将选手的电脑用星形拓扑…

实验一 进程管理与进程同步

实验一 进程管理与进程同步 实验目的: 了解进程管理的实现方法,理解和掌握处理进程同步问题的方法。 实验内容: 实现银行家算法、进程调度过程的模拟、读者-写者问题的写者优先算法。 实验步骤: 1.银行家算法流程图 &…

pytorch矩阵乘法总结

1. element-wise(*) 按元素相乘,支持广播,等价于torch.mul() a torch.tensor([[1, 2], [3, 4]]) b torch.tensor([[2, 3], [4, 5]]) c a*b # 等价于torch.mul(a,b) # tensor([[ 2, 6], # [12, 20]]) a * torch.tenso…

不废话!CentOS 8 安装docker的详细过程

目录 1.更新系统 2. 安装依赖包 3.添加 Docker YUM 仓库 4.安装 Docker 5.启动 Docker 6.设置 Docker 开机自启 7.测试 Docker 1.更新系统 dnf update 这里直接输入y,耐心等待更新即可 直到看到complete表示更新完毕 2. 安装依赖包 Docker 需要一些依赖包才能正常…

Django框架之模型自定义管理器

类属性 objects 是manager类的一个对象,作用是与数据库进行交互。 当定义模型类没有指定管理器,django会为模型创建objects管理器。 表结构与数据 CREATE TABLE myapp_grades (id int(11) NOT NULL AUTO_INCREMENT,name varchar(20) NOT NULL,boy_num…