Spring MVC文件上传配置
版权声明
- 本文原创作者:谷哥的小弟
- 作者博客地址:http://blog.csdn.net/lfdfhl

文件上传
Spring MVC文件上传基于Servlet 3.0实现;示例代码如下:
@Overrideprotected void customizeRegistration(ServletRegistration.Dynamic registration) {super.customizeRegistration(registration);// 上传文件的临时存储路径String tempFilePath = "具体路径";File tempFile = new File(tempFilePath);if (!tempFile.exists()) {tempFile.mkdir();}// 最大文件大小long maxFileSize = 1024 * 1024 * 10; // 整个请求的最大大小long maxRequestSize = 1024 * 1024 * 20; // 文件大小阈值int fileSizeThreshold = 1024 * 1024 * 2; MultipartConfigElement multipartConfigElement= new MultipartConfigElement(tempFilePath, maxFileSize, maxRequestSize, fileSizeThreshold);registration.setMultipartConfig(multipartConfigElement);}
文件大小阈值
在MultipartConfigElement的上下文中,文件大小阈值(fileSizeThreshold)具有特定的意义。这个阈值指定了在将上传的文件数据写入磁盘之前,数据应保持在内存中的最大字节数。换句话说,它定义了文件上传时内存使用和磁盘使用的分界点。
当文件上传开始时,数据首先会被存储在服务器的内存中。如果上传的文件大小小于这个阈值,那么整个文件都会被保存在内存中,直到上传完成。这样可以提高小文件的上传速度,因为内存访问通常比磁盘访问要快得多。
然而,如果上传的文件大小超过了这个阈值,那么超出阈值部分的数据就会被写入到磁盘上的临时存储位置。这样可以防止大文件上传时占用过多的服务器内存,从而保护服务器的稳定性和性能。
文件大小阈值的设置需要权衡内存使用和磁盘I/O。如果阈值设置得太高,可能会导致服务器内存不足;如果阈值设置得太低,可能会增加磁盘I/O,从而降低上传速度。因此,这个值应该根据服务器的硬件配置、预期的文件大小分布以及性能要求来合理设置。
在以上代码中,fileSizeThreshold被设置为2MB,这意味着任何小于或等于2MB的文件都会完全存储在内存中,而大于2MB的文件则会部分或全部存储在磁盘上。这样的设置适用于许多常见的Web应用程序场景。
设置对multipart请求的支持
registration.setMultipartConfig(multipartConfigElement)这句代码在Servlet配置中用于设置对multipart请求的支持。具体来说,它配置了Servlet如何处理HTTP multipart请求,这种请求通常用于文件上传。
multipartConfigElement是一个MultipartConfigElement对象,它包含了处理multipart请求时所需的各种配置信息,如:
- 临时存储路径:用于存储上传文件数据的临时目录。
- 最大文件大小:允许上传的单个文件的最大字节数。
- 最大请求大小:整个multipart请求的最大字节数,包括所有文件和表单数据。
- 文件大小阈值:在将文件数据写入磁盘之前,可以在内存中保持的最大字节数。
通过调用registration.setMultipartConfig(multipartConfigElement),这些配置信息被应用到Servlet上,从而确保Servlet能够正确地解析和处理multipart请求。这对于实现文件上传功能来说是必要的步骤。
需要注意的是,这种方式通常出现在自定义Servlet注册的过程中,即可能是在一个实现了ServletContainerInitializer接口的类中。在Spring Boot等现代框架中,这类配置可能会通过更高级别的配置选项或注解来自动处理,但底层原理是类似的。
相关文章:
Spring MVC文件上传配置
版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 文件上传 Spring MVC文件上传基于Servlet 3.0实现;示例代码如下: Overrideprotected void customizeRegistration(ServletRegistration.Dynamic reg…...
JavaScript高级(十八)---进程和线程,宏任务和微任务
进程和线程 进程(process):计算机已经运行的程序,是操作系统管理程序的一种方式,我们可以认为,启动一个应用程序,就会默认启动一个进程(也可能是多个进程)。 线程&…...
How to install mongodb on redhat 7.7
下载rpm: mongodb-enterprise-server-6.0.3-1.el7.x86_64.rpmmongodb-org-server-6.0.4-1.el7.x86_64.rpmmongodb-mms-6.0.9.100.20230201T2148Z.x86_64.rpm rpm -ivh mongodb-org-server-6.0.4-1.el7.x86_64.rpm rpm -ivh mongodb-mms-6.0.9.100.20230201T2148Z.x86_64.rpm …...
关于继承是怎么样的?那当然是很好理解之
本文描述了关于继承的大部分知识,但是并不全,每篇博客之间的知识都有互串,所以需要把几篇文章合起来看,学会融会贯通! 温馨提示:使用PC端观看,效果更佳! 目录 1.继承是什么 2.什…...
高可用系统有哪些设计原则
1.降级 主动降级:开关推送 被动降级:超时降级 异常降级 失败率 熔断保护 多级降级2.限流 nginx的limit模块 gateway redisLua 业务层限流 本地限流 gua 分布式限流 sentinel 3.弹性计算 弹性伸缩—K8Sdocker 主链路压力过大的时候可以将非主链路的机器给…...
LeetCode-回文数
LeetCode-回文数 解体思路: ①第一种:转换成字符串,使用字符串的现有api方法进行反转 ②第二种:直接使用循环除余乘10方法,进行反转 涉及知识点: 循环判断,StringBuffer,int类型…...
50. 【Linux教程】源码安装软件
本小节介绍如何使用软件的源码包安装软件,以安装 nginx 源码包为例。 1.下载软件源码包 使用如下命令下载 nginx 源码包: wget http://nginx.org/download/nginx-1.18.0.tar.gz执行结果如下图所示: 2.解压源码包 下载好了压缩包之后&#…...
《操作系统实践-基于Linux应用与内核编程》第10章--实验 Qt聊天程序
前言: 内容参考《操作系统实践-基于Linux应用与内核编程》一书的示例代码和教材内容,所做的读书笔记。本文记录再这里按照书中示例做一遍代码编程实践加深对操作系统的理解。 引用: 《操作系统实践-基于Linux应用与内核编程》 作者:房胜、李旭健、黄…...
探究Kafka主题删除失败的根本原因
欢迎来到我的博客,代码的世界里,每一行都是一个故事 探究Kafka主题删除失败的根本原因 前言主题删除的基础主题删除的定义和作用:删除操作的基本流程: 可能存在删除异常的因素数据积压的处理方法Broker状态异常处理方法通用方法 前…...
JavaSE(上)-Day7
JavaSE(上)-Day7 类和对象封装privatethis构造方法标准JavaBean对象的内存图执行Test类main方法生成一个User对象的内存过程 基本数据类型和引用数据类型的区别this的内存原理成员变量和局部变量区别 类和对象 类是设计图纸,对象是真正的实例…...
记录一下在Pycharm中虚拟环境的创建
如果在Pycharm中要新建一个虚拟环境,那你可以在Terminal中选择Command Prompt,在这里面执行相关命令 一、安装了Anaconda,创建虚拟环境 当你使用解释器是Anaconda提供的时,你可以使用conda命令执行,见以下操作&#x…...
Python从入门到精通秘籍九
一、Python中文件编码概念 在Python中,文件编码指的是将文本内容转换为字节序列的过程。不同的编码方式使用不同的字符集和字节表示形式。下面是一个示例代码: # 写入文本到文件 text "你好,世界!" with open("…...
善于利用window挂在全局变量
开发过程成中遇到一个奇怪的问题,打开一个echats图表之后,关闭echarts图再进入其他页面页面会报错提示 $(...).draggble not a function经过一步步定位,发现echats图是通过后端获取js、css文件然后在本地绘制而成。而获…...
《C缺陷和陷阱》-笔记(5)
目录 一、整数溢出 溢出 如何防止溢出 二、为函数main提供返回值 连接 一、什么是连接器 连接器工作原理 三、声明与定义 四、命名冲突与static 修饰符 statia 一、整数溢出 溢出 C语言中存在两类整数算术运算,有符号运算与无符号运算。 在无…...
【数字图像处理matlab系列】保存图像
【数字图像处理系列】保存图像imwrite函数 使用函数imwrite可以将图像保存到本地上,该函数的语法为 imwrite(image_data, filename)其中,image_data是要写入的图像数据,可以是一个矩阵或一个三维数组(对于彩色图像),filename是要写入的文件名,可以包含路径信息。例如,…...
八股文三(Spring、Spring Cloud Alibaba)
Spring篇 什么是Spring Spring是个轻量级的框架,他有两大内核分别是IOC、AOPIOC是什么 * 依赖注入和控制反转,它是一种思想,创建对象不是直接new出来,而是交给IOC容器,由容器去创建进行管理,这就是控制反…...
一文带你详解天池工业数据集
人工智能是国家战略性新兴产业,制造业是国民经济的主体,随着人口红利的消失,加强设备自动化改造,提高生产自动化程度,减小劳动强度,改善作业环境,已经成为制造业的普遍共识。天池大赛开放出一批…...
08 龙芯平台openstack部署搭建-neutron-controller部署
一、创建neutron相关数据库、服务凭证和API端点 1.创建neutron数据库,授予合适的访问权限 mysql -uroot -ploongson -e “CREATE DATABASE neutron;” mysql -uroot -ploongson -e “GRANT ALL PRIVILEGES ON neutron.* TO ‘neutron’‘localhost’ IDENTIFIED B…...
JAVA 100道题(6)
6.创建一个表示矩形的类,包括宽度和高度属性,以及计算面积和周长的方法。 下面是一个简单的Python类,表示矩形,包含宽度和高度属性,以及计算面积和周长的方法: python复制代码 class Rectangle: def __ini…...
Leetcode面试经典150题
数组字符串 合并两个有序数组 思路 类似于归并排序,对两个有序数组进行合并即可,但是空间复杂度是O(nm); 代码 class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int[] ans new int[n m];int i 0, j 0;int cnt 0;…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
