7.2 处理multipart形式的数据

multipart格式的数据会将一个表单拆分为多个部分(part),每个部分对应一个输入域。在一般的表单输入域中,
它所对应的部分中会放置文本型数据,但是如果上传文件的话,它所对应的部分可以是二进制,下面展现了multipart的请求体:

在这个multipart的请求中,我们可以看到profilePicture部分与其他部分明显不同。除了其他内容以外,它还有自己的Content-
Type头,表明它是一个JPEG图片。尽管不一定那么明显,但profilePicture部分的请求体是二进制数据,而不是简单的文本。
尽管multipart请求看起来很复杂,但在Spring MVC中处理它们却很容易。在编写控制器方法处理文件上传之前,我们必须要配置一个multipart解析器,通过它来告诉DispatcherServlet该如何读取multipart请求。

7.2.1 配置multipart解析器

DispatcherServlet并没有实现任何解析multipart请求数据的功能。它将该任务委托给了Spring中MultipartResolver策略接口的
实现,通过这个实现类来解析multipart请求中的内容。从Spring 3.1开始,Spring内置了两个MultipartResolver的实现供我们选择:

CommonsMultipartResolver:使用Jakarta CommonsFileUpload解析multipart请求;
StandardServletMultipartResolver:依赖于Servlet 3.0对multipart请求的支持(始于Spring 3.1)。

使用Servlet 3.0解析multipart请求兼容Servlet 3.0的StandardServletMultipartResolver没有构
造器参数,也没有要设置的属性。这样,在Spring应用上下文中,将其声明为bean就会非常简单,如下所示:

具体来讲,我们必须要在web.xml或Servlet初始化类中,将multipart的具体细节作为DispatcherServlet配置的一部分。
如果我们采用Servlet初始化类的方式来配置DispatcherServlet的话,这个初始化类应该已经实现了
WebApplicationInitializer,那我们可以在Servlet registration上调用setMultipartConfig()方法,传入一
个MultipartConfig-Element实例。如下是最基本的DispatcherServlet multipart配置,它将临时路径设置为“/tmp/spittr/uploads”:

7.2.2 处理multipart请求

现在已经在Spring中(或Servlet容器中)配置好了对mutipart请求的处理,那么接下来我们就可以编写控制器方法来接收上传的文件。要实
现这一点,最常见的方式就是在某个控制器方法参数上添加@RequestPart注解

<form>标签现在将enctype属性设置为multipart/formdata,这会告诉浏览器以multipart数据的形式提交表单,而不是以表
单数据的形式进行提交。在multipart中,每个输入域都会对应一个part。

接受MultipartFile使用上传文件的原始byte比较简单但是功能有限。因此,Spring还提
供了MultipartFile接口,它为处理multipart数据提供了内容更为丰富的对象。如下的程序清单展现了MultipartFile接口的概况。

将文件保存到Amazon S3中另外一种方案就是让别人来负责处理这些事情。多加几行代码,我们
就能将图片保存到云端。例如,如下的程序清单所展现的saveImage()方法能够将上传的文件保存到Amazon S3中,我们
在processRegistration()中可以调用该方法。

处理multipart形式的数据相关推荐

  1. R语言ggplot2可视化分面图(facet,facet_wrap): 不同分面配置不同的数据范围、自定义每个分面的轴数据格式化形式及数据范围

    R语言ggplot2可视化分面图(facet,facet_wrap): 不同分面配置不同的数据范围.自定义每个分面的轴数据格式化形式及数据范围 目录

  2. html表格中绑定显示xml文档内容的简单实例,JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)...

    本文实例讲述了JS读取XML文件数据并以table形式显示数据的方法.分享给大家供大家参考,具体如下: 先看xml文件: 张秋丽 女 18 李文才 男 31 李斯文 男 22 马英 女 25 孙红雷 ...

  3. Burp Post、Get数据包转为上传multipart/form-data格式数据包

    方法一: 新建一个网页进行上传,代码代码如下: <html> <head></head> <body> <form method="po ...

  4. python输入文字、成为字典_python中将字典形式的数据循环插入Excel

    1.我们看到字典形式的数据如下所示 list=[["2891-1", "D"],["2892-1", "D"],[&qu ...

  5. 二进制数据图片(bit-data-map): 一种通过图片的形式传递数据信息的方式

    二进制数据图片 前言 最近公司那台终端电脑的粘贴功能坏了, 连接远程想从里面拿一个文件出来, 试了好多种方法不顶用, 远程终端开了一堆程序也不能随便重启远程终端, 最终是关了一大堆不必要的应用, 又重 ...

  6. 微信小程序开发中遇到的问题(前台用表格形式显示数据)

    微信小程序之前台用表格形式显示数据 开发环境:微信开发者工具+eclipse+Tomcat+Mysql 功能描述:微信小程序前台传参到后台获取数据,后台将数据返回给前台,前台用表格形式显示数据. 后台 ...

  7. 表单form数据默认以键值对的形式将数据回发到服务器,回发非纯文本需使用enctype=multipart/form-data方式编码为整条消息...

    表单使用encrype=application/x-www-form-urlencoded时,各控件数据会以键值对的形式发到服务器,如果表单数据不是文本,这种编码就不能满足需要. 使用enctype= ...

  8. SpringMVC 处理multipart形式数据:java方式配置文件上传

    为什么80%的码农都做不了架构师?>>>    首先利用Maven引入jar包: <dependency> <groupId>commons-io</g ...

  9. python requests form data_python使用requests发送multipart/form-data请求数据

    def client_post_mutipart_formdata_requests(request_url,requestdict): #功能说明:发送以多部分表单数据格式(它要求post的消息体分 ...

最新文章

  1. 用python写脚本筛选原创微博_基于python编写的微博应用
  2. 8道Java经典面试题
  3. dojo中 xhr.post向后台传参出现乱码
  4. 全站仪和手机连接软件_全站仪USB口数据线驱动-USB全站仪器数据线驱动程序下载免费版-西西软件下载...
  5. java线程的基本概念
  6. python基础——元组、文件及其它
  7. Angular multiple binding debug
  8. 密码学哈希函数_哈希函数在密码学中的应用
  9. 【分享】一套非常简单的企业即时通讯
  10. 计算机学院刘彤,刘彤-北京航空航天大学材料科学与工程学院
  11. caffe 利用Python API 做数据输入层
  12. php简单多态,PHP 对象 多态性 简单图形计算器
  13. MacOS如何设置不使用时退出登录用户账号
  14. 基于 OpenLayers3 实现的 HTML5 GIS 电信资源管理系统
  15. 睿智的目标检测26——Pytorch搭建yolo3目标检测平台
  16. datetime处理日期时间
  17. windows7启动出现0xc000014c错误代码解决办法
  18. 2022-2028全球及中国铝硅合金电子封装材料行业研究及十四五规划分析报告
  19. 2021.8.14【提高B组模拟6】T3 + P7527 [USACO21OPEN] United Cows of Farmer John (树状数组)
  20. Class Activation Mapping(CAM)介绍

热门文章

  1. 共享锁和独占锁简单介绍
  2. 驾考 模拟高速公路停车取卡
  3. html网页制作期末大作业成品_新疆旅游网页设计作品_dreamweaver作业静态HTML网页设计模板_新疆旅游景点网页作业制作
  4. 记录七星qp游戏本地修改玩法-前端部分
  5. 门面模式(Facade模式)详解
  6. 如何根据一张图片,转换到3D图
  7. C/C++编程知识:网络编程之 Https 详细分析,超详细知识点!
  8. findBugs 快速开始
  9. Python001 【零基础学习Python】前言及第1/2章
  10. 使用vcglib库读取obj文件并显示(一或多个材质)