处理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指定)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容