Spring文件上传。解析multipart请求数据。

ESP32-S3开发环境避坑指南:VS Code+ESP-IDF离线安装全流程(附国内镜像加速) 本文提供了一份详细的ESP32-S3开发环境离线安装指南,重点解决网络依赖问题。通过整合国内镜像加速,手把手教你完成VS Code、ESP-IDF框架、工具链及Python依赖的本地化部署,实现稳定、可重复的开发环境搭建,大幅提升IoT开发效率。 阅读详情

文件上传其实就是form表单的enctype设置为"multipart/form-data"(enctype="multipart/form-data"),上传二进制数据。SpringMVC的Controller接受到二进制的byte数组,因为上传文件的原始byte功能有限,Spring提供了MultipartFile接口。

MultipartFile接口提供了很多方法,获取原始文件名getOriginalFilename(),文件大小,以及内容等等,还可以将文件以流的方式读取。最重要的是还提供了一个方便的transferTo()方法,用于将文件写入文件系统中。

DispatcherServlet并没有实现任何解析multipart请求数据的功能。将该任务委托给了Spring中的MultipartResolver策略接口的实现,通过这个实现类来解析multipart请求中的内容。Spring内置了CommonsMultipartResolver解析multipart请求。需要依赖commons-fileuploa.jar包和commons-io.jar包。

设计思想:在一些表单文件上传设计思想,例如注册用户的头像上传。可以在用户选择了头像文件就触发头像文件上传,返回文件完整路径。将头像上传和表单提交写在不同的controller中。然后提交表单,将文件路径和表单数据例如姓名之类的一起写入数据库。本文只介绍简单的文件上传,但道理都相同,需要实现更复杂的功能,无非在写更多的逻辑代码。

1.搭建环境:导入jar包,配置SpringMVC的xml。

文件上传需要的jar包:

<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.4</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>2.4</version>
		</dependency>

配置CommonsMultipartResolver:在springmvc配置文件中配置。

	<!--文件上传 Mutilpart解析器 -->
	<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="defaultEncoding" value="utf-8" />
		<property name="maxUploadSize" value="10485760000" />
		<property name="maxInMemorySize" value="40960" />
	</bean>

后端相关代码只有Controller,只包含写入系统简单代码。

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

@Controller
public class FileUpload {
	@RequestMapping("upload")
	@ResponseBody
	public String upload(@RequestParam("file") MultipartFile file, String name, HttpServletRequest request)
			throws IllegalStateException, IOException {
		// 获取文件存储在服务器的地址
		String path = request.getSession().getServletContext().getRealPath("upload");
		File filePath = new File(path);
		if (!filePath.exists() && !filePath.isDirectory()) {
			// 如果目录不存在创建目录
			filePath.mkdir();
		}
		// 获取原始文件名称
		String originalFileName = file.getOriginalFilename();
		// 获取文件类型
		String type = originalFileName.substring(originalFileName.lastIndexOf(".") + 1);
		// 获取文件名称(不包含格式)
		String fname = originalFileName.substring(0, originalFileName.lastIndexOf("."));
		// 设置文件新名称: 当前时间+文件名称(不包含格式)
		Date d = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
		String date = sdf.format(d);
		String fileName = date + fname + "." + type;
		// 在指定路径下创建一个文件
		File targetFile = new File(path, fileName);
        //写入数据库
		file.transferTo(targetFile);
        //简单的返回
		return path + "/" + fileName + "名字:" + name;

	}

}

前端from。前端框架逻辑基本是一样的,无非方式不同,查看相关文档,即可完成上传。

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>hello world</title>
</head>
<body>
<form action="http://localhost:8080/login/upload" enctype="multipart/form-data" method="post">
    姓名:<input type="text" name="name"/><br/>
    文件:<input type="file" name="file"/><br/>
    <input type="submit" value="提交"/>
</form>
</body>
</html>

from还有一个name,后端可以用String接。

本文只是介绍了,spring文件上传的简单实现。有时间详细介绍CommonsMultipartResolver。

Istio ICA考试之路---2-2 找到dr部分,这部分可以在mirroring里找也可以和题2-1一样在Traffic Management的dr里复制,内容都一样。此题之后都是在cluster-2上操作,所以就不需要再切换了.之后的几题2.1节就忽略掉了。可以看到,80%的流量被镜像到了dev上,实际考试这步可以忽略。看到ex-ip是192.168.126.220。获取gw,把gateways加入到vs配置中。获取istio-ingress的ex-ip。就获得了这样一个模板文件。查看2个pod的日志。 阅读详情

相关推荐

【CTFhub】——hate_php2021

【CTFhub】——hate_php2021

manerzi的博客 1605

java spring formdata_Spring MVC处理Multipart/form-data的方法介绍(代码示例)

本篇文章给大家带来的内容是关于Spring MVC处理Multipart/form-data的方法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。Multipart/form-dataMultipart/form-data 为表单的MIME编码属性之一,共有三个值① application/x-www-form-urlencoded② multipart/form-...

weixin_36250086的博客 1162

how2heap 深入学习(1)

how2heap glibc 2.23学习

CoLin的pwn小屋 3180

表单Content-Type为multipart/form-data时,后台数据的接收

我们在写form提交表单的时候,后台大多数用request.getParameter的方式来接收前台输入的数据。但如果我们表单中提交的数据包含file文件传输的话,我们需要将Content-Type改为multipart/form-data。这时后台就不能再通过request.getParameter来获取表单的内容了。就需要通过request的输入流request.getInputStream来获取表单内容了。这里记录一种获取表单内容的方式,这种方式既可以获得表单的文本数据也可以获取图片的字节流

zjlovety的专栏 3543

Halcon 算子 select_shape

作用:借助形状特征选择区域; 参数翻译(对应以上参数顺序): 输入区域、 输出满足条件的区域、 输入参数形状特征('anisometry', 'area', 'area_holes', 'bulkiness'等)、 输入参数关系符('and', 'or')、 输入参数下限值(0.0 ≤ Min ≤ 99999.0)、 输入参数上限值(Max >= Min 并且0.0 ≤ Max ≤ 99999.0); 描述: 算子select_shape根据形状特征选择区域,对于...

奔跑的郑的博客 2万+

Zynq裸机调试RTL8211FS网卡踩坑记:从ping不通到完美兼容的完整代码修改

本文详细记录了在Zynq平台上使用Xilinx SDK(XSDK)调试RTL8211FS网卡的完整过程,从最初的ping不通问题到最终实现完美兼容的解决方案。通过分析PHY芯片的寄存器配置差异,提供了关键代码修改和调试技巧,帮助开发者快速解决类似问题。

weixin_42550597的博客 422

Spring MVC增强型Controller-MultiActionController 使用方法

MVCSpringBeanServletWeb      如果为每个请求都设计一个controller的话,随着开发的进行,工程也一定会日渐庞大。当然,Spring框架提供了避免这种情况出现的方法,那就是使你的controller继承自org.springframework.web.servlet.mvc.multiaction.MultiActionController。就像Struts里的D

Jason的专栏 1869

【ubuntu】【VirtualBox】VirtualBox无法加载USB移动设备的解决方法(支持U盘启动盘)

提示:测试可用。

联系方式:927632640 2440

spring multipart上传附件,下载,预览实现

js: 1.上传: //上传附件 function openUpload(){ var file = $("input[name='fileUpload']").val(); if(file == ""){ $.messager.alert("上传","请上传附件!"); }else { $.ajaxFileUpload({ url: G_CTX_PATH+'/

caisenbinbeida2009的专栏 940

OpenOCD入门到精通:第20章 Target 子系统源码分析

摘要:本章深入分析OpenOCD Target子系统的核心实现机制。重点包括:1) 通过target_type虚函数表实现多架构抽象,支持ARM、RISC-V等30+种目标;2) ARM ADIv5协议栈实现,包含DAP/AP核心数据结构和访问机制;3) 分层架构设计,从调试接口层到传输层的完整调用链路。系统采用面向对象思想,统一管理目标状态、寄存器缓存、断点/观察点等调试要素,为上层提供标准化的调试操作接口。

从事嵌入式linux android驱动开发,拥有全栈能力 181

YOLO26改进策略【卷积层】| CVPR 2025 频率动态卷积 FDConv 频域分权重提多样性 + 双调制降冗余,增强特征表征能力

本文记录的是利用FDConv 算子改进 YOLOv11 的卷积层特征提取层。(Frequency Dynamic Convolution)通过傅里叶域权重划分与空间-频率双调制机制结合,实现YOLOv11特征提取中频率多样化的动态卷积与空间自适应的频带调制。本文利用算子,通过傅里叶不相交权重生成频率差异化的并行卷积核以丰富特征表达,再通过核空间调制和频带调制结合局部-全局信息、适配图像空间异构性,同时依托固定参数预算实现轻量化设计,对YOLOv11中目标的低频语义特征与高频细节/边界特征进行针对性增强、抑制

Limiiiing的博客 476

api如何使用_《前端那些事》如何更好管理 Api 接口

前沿:自从前端和后端分家之后,前后端接口对接就成为了家常,“谁”也离不开谁,而对接接口的过程就离不开接口文档,比较主流就是Swagger(强大的API文档工具),当然今天它不是主角,顶多也就是个辅助。这篇文章旨在梳理如何在前端项目中更好的去管理跟后端“对接”的接口聊接口管理,离不开请求库,vue技术栈中请求库谈及最多的,非axios莫属,先让我们重新梳理下axios1.axiosaxios 是一个...

weixin_39943220的博客 356

PCL DBSCAN密度聚类【2026最新版】

点云密度聚类的PCL代码实现,与matlab自带的密度聚类算法进行对比验证,结果一致。3万多个点能再2秒左右运行出结果,算法效率尚可。

点云侠的博客 5682

Servlet & Spring对Multipart数据请求的支持

参考资料: (1)RFC 1867 (2)Java Servlet Specification 3.1; (3)《Java Web高级编程》;1. Multipart FormDataMultipart是HTML中表单文件上传的基本格式,一般通过如下方法可以通过HTTP上传文件: <form action="_URL_" method="POST" enctype="multipart/

Zerohuan的专栏 6282

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

理解 multipart/form-data 中的 boundary:文件上传的关键

multipart/form-data中的boundary是文件上传的关键分隔符。它作为HTTP请求头中的唯一标识字符串(如----WebKitFormBoundaryEBDscQO08JaFZOy6),用于分隔请求体中的不同数据部分,包括文本字段和文件数据。boundary保证了二进制数据不会与字段分隔符冲突,支持混合类型数据上传,并确保服务器能正确解析请求。每次请求生成的随机boundary前缀保证了唯一性,使多文件上传和复杂表单提交成为可能,是可靠文件传输的基础机制。

南部余额的博客 997

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Spring HTTP请求注解详解

Spring HTTP请求 @RequestParam @RequestBody @RequestPart RequestPart 注解会生成临时文件,而RequestParam 则不会生成临时文件,效率上 ReqeustParam 会比 RequestPart 快一个数量级 文件及复杂数据的请求 接口需要同时上传文件及复杂结构的数据,优雅的处理方案为使用@RequestPart,请求的Content-Type为multipart/form-data,复杂结构数据再指定为相应的javabean

若明天不见 1946

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Spring 梳理-处理Multipart 请求

原理讲解 简单的HTTP POST 大家通过HTTP向服务器发送POST请求提交数据,都是通过form表单提交的,代码如下: <form method="post"action="http://w.sohu.com" > <inputtype="text" name="txt1"> <input...

weixin_30871701的博客 254

Spring学习笔记之Spring MVC的高级技术

本篇主要介绍利用Spring MVC处理文件上传,异常处理,为控制器添加通知以及跨重定向请求传递数据。

薛小强Forever 2765

SpringBoot23-文件上传助手MultipartResolver

概念含义Spring 中专门解析上传文件的人解析后的文件对象(你在 Controller 里用的)Spring Boot 默认使用老项目可能使用。

qq_31532983的博客 488

文件上传

<head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/upload1" enctype="multipart/form-data" method="post"> <input type="text" name="username"><br> .

薄荷糖 195

Spring_SpringMVC处理文件上传

世上最快乐的事,莫过于为理想而奋斗。—— 苏格拉底 1、multipart请求   一般表单提交所形成的请求结果时很简单的,就是以"&"符分割的多个name-value对,如:"firstName=Charles&lastName=Bob"。对于典型的基于文本的表单提交,这种编码形式也足够满足要求,但是对于multipart请求中传送二进制数据,就显得力不从心。   对...

weixin_30517001的博客 65

Spring Boot控制层参数绑定 @RequestPart 注解详解

特性@RequestParam (multipart时)说明JSON绑定✅ 直接绑定到对象❌ 只能绑定到字符串@RequestPart 可以使用 HttpMessageConverter内容类型每个部分独立整个请求统一@RequestPart 支持混合内容类型文件上传两者都可以简单字段✅ 字符串✅ 字符串两者都可以验证支持✅ @Valid❌ 不支持@RequestPart 支持 Bean Validation✅ 使用❌ 不使用@RequestPart 可以利用 JSON 转换器等。

BillKu的博客 1556

MultipartFile文件上传 (1) - Controller同时处理文件流和附加入参示例

MultipartFile文件上传

noob_can的博客 6040

上传图片之Processing of multipart/form-data request failed. Stream ended unexpectedly

org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of ...

就写一行代码 2705

表单form的enctype="multipart/form-data"使用疑惑

在使用表单传送数据的时候,如果form 加了enctype="multipart/form-data" 这个属性,那么表单请求传到另一个jsp或servlet 里时是不能用request.getParameter()来获取到各个表单元素的值的。可以通用这样(上传组件提供的API): boolean isMultipart = ServletFileUpload.isMultipartC...

dayou7738的博客 250

深入解析multipart/form-data:从HTTP协议原理到Spring、FastAPI实战

在Web开发中,HTTP协议的数据传输格式是基础技术概念之一。application/x-www-form-urlencoded格式虽然简单,但在处理混合数据类型时存在局限。multipart/form-data作为HTTP POST请求的一种编码格式,其核心原理是通过边界符将数据分割为独立部分,每个部分包含描述头和实际内容,从而高效支持文本与二进制文件的混合传输。这种格式的技术价值在于解决了传统编码方式处理文件上传时的效率与可靠性问题,广泛应用于表单提交、文件上传等场景。结合“c++ socket 发送文

weixin_31188927的博客 223
上一篇: 4.工厂模式
下一篇: LeetCode-262. 行程和用户( 262. Trips and Users)。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值