前言
由于本人接触最多的是电子商城的开发,目前涉及到的接口数据处理最多的为字符串,少部分为图片,因此处理大型文件的经验比较少。
在学习Java Spring过程中,了解到Java Spring处理数据过程中有很多值得学习的地方。就拿multipart来说,Spring为multipart提供了很多扩展性的配置,能够针对不同的业务场景进行相关配置
multipart
对于表单提交,multipart格式的数据会将一个表单拆分成多个部分,每一个部分对应一个输入域。在一半表单输入中,它所对应的部分会放置文本形数据,如果上传文件的话,它可以对应是二进制
比如表单提交数据如下
firstName=ric&lastName=mansen&age=99
每一个参数用&
分隔开
展示为multipart请求体如下
-----------webKitFFormBoundarysioud821
Content-Disposition: form-data; name="firstName"
ric
-----------webKitFFormBoundarysioud821
Content-Disposition: form-data; name="lastName"
manson
-----------webKitFFormBoundarysioud821
Content-Disposition: form-data; name="age"
99
如果为文件的话,multipart请求体如下
-----------webKitFFormBoundarysioud821
Content-Disposition: form-data; name="profilePicture"; fileName="me.jpg"
Content-type: image/jpeg
[[Binary image data goes here]]
文件请求体相比普通数据请求体多了Content-type的标示,以及数据是以二进制形式进行传输
配置multipart解析器
解析multipart中的数据的功能由Spring中的MultipartResolver
策略接口实现,通过这个实现来解析multipart请求中的内容
Spring内置了两个MultipartResolver
的实现提供给我们选择
- CommonsMultipartResolver: 使用 Jakarta Commons FileUpload解析multipart请求
- StandardServletMultipartResolver: 依赖于Servlet 3.0对multipart请求的支持
一般对于3.0或者更高级的版本,优先使用StandardServletMultipartResolver,因为它使用了Servlet提供的功能,并且不需要依赖任何其他项目
servlet小简介
Java Servlet是运行在web服务器或者应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
使用 Servlet,可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。
具体细节之后再去了解(原谅下本人懒惰0.0)
处理multipart请求
一般处理multipart请求,实在某个控制器方法参数上添加@RequestPart
注解
@RequestMapping(value="/register", method=POST)
public String processRegistration (
@RequestPart("profilePicture") byte[] profilePicture,
@Valid Spitter spitter,
Errors errors) {
...
}
以上就是上传文件后,byte数组用于保存请求中对应的part数据(通过@RequestPart
指定)