Spring build-in multipart fileupload support
Spring 内置了对 web 应用 multipart(文件上传) 的支持,即通过可拔插的 MultipartResolver 对象实现对 multipart 的处理。该对象定义在 org.springframework.web.multipart
包内,它是按照 RFC 1867 设计的一个策略接口,自 Spring 2.5 开始,Sping 内包含了一个它的具体实现类,即 org.springframework.web.multipart.commons.CommonsMultipartResolver,该实现类是建立在 Jakarta Commons FileUpload 基础上的,因此在使用时需要引入对 ‘commons-fileupload.jar’ 的依赖。
默认情况下,Spring 是不对 multipart 进行处理的,你可以在你的 web 应用上下文配置中添加一个 MultipartResolver 的实现来启用对 multipart 的支持,这样容器就会对每个请求进行检查,如果发现请求包含了 multipart 数据,就会使用配置的 MultipartResolver 实现来对请求进行处理。
MultipartResolver 的用法
下面例子演示了如何使用 Sping 自带的实现类 CommonsMultipartResolver 来启用 multipart 处理,在 Spring 应用上下文中添加如下配置:
|
|
添加了该配置,当 Spring 的 DispatcherServlet 收到包含 multipart 的请求后,配置的 MultipartResolver 就会被调用来处理这类请求,它会将当前的 HttpServletRequest 包装成一个 MultipartHttpServletRequest 来支持 multipart 的处理。从 MultipartHttpServletRequest 中你可以获取到 multipart 的数据内容,从而让你的 Controller 能够直接访问请求中包含的文件。
处理表单上传文件请求示例
假设我们创建的表单页面如下:
|
|
我们给 form 标签添加了 enctype 属性,其值为 multipart/form-data
,该属性是用来告知浏览器用什么方法对 multipart 字段内容进行编码。