处理multipart形式的数据

前言

由于本人接触最多的是电子商城的开发,目前涉及到的接口数据处理最多的为字符串,少部分为图片,因此处理大型文件的经验比较少。
在学习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指定)

你可能感兴趣的:(处理multipart形式的数据)