文档章节

Spring MVC 配置 multipart 解析器 上传文件

聪聪小可爱
 聪聪小可爱
发布于 2016/11/06 17:57
字数 566
阅读 152
收藏 2

#概述

尽管一般表单提交足以满足对典型的基本文本提交,但是当面对传送二进制数据,例如图片,视频等就显得力不从心了。与之不同的是,multipart 格式的数据会将一个表单拆分为多个部分 ,每个部分对应一个输入域。在一般的表单输入域中,它所对应的部分会放置文本型数据,但是如果是上传文件的话,所对应的就是二进制。

###修改表单

首先你得修改你的表单,告诉浏览器以 multipart 数据的形式提交表单,而不是以表单数据的形式提交。

    <form method="POST" enctype="multipart/form-data">
    <!---
    your form
    -->
    </form>    

###配置 multipart 解析器

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

  • CommonsMultipartResolver:使用 Jakarta Commons FileUpload 解析。
  • StandardServletMultipartResolver : 依赖 Servlet 3.0 对 Multipart 的支持。

StandardServletMultipartResolver

  1. 将其声明位Spring上下文中的一个Bean
   @Bean
    public MultipartResolver multipartResolver() throws IOException {
        return new StandardServletMultipartResolver();
    }
  1. 配置 StandardServletMultipartResolver
public class ZKepsWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    //....other code
    @Override
    protected void customizeRegistration(ServletRegistration.Dynamic registration) {
        //缓存目录 这里可以做很多配置,例如上传文件的大小等
        registration.setMultipartConfig(new MultipartConfigElement("/var/local/tmp"));
    }
}

CommonsMultipartResolver

这个配置可以一气呵成

    @Bean
    public MultipartResolver multipartResolver() throws IOException{
        //同样的 可以配置很多参数
        CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
        multipartResolver.setUploadTempDir(new FileSystemResource("/var/local/tmp"));
        return multipartResolver;
    }

处理 multipart 请求

Spring 提供了一个 MultipartFile 接口,它为处理multipart 数据提供了内容丰富的对象。所以可以改写你的 Controller了。

    @RequestMapping(value = "/detailRegister", method = RequestMethod.POST)
    public String detailRegister(@RequestPart("avator") MultipartFile avator) {
        //MultipartFile 接口有很多方法,这只是其中一个。
        try {
            avator.transferTo(
                    new File("/var/local/avators/" + avator.getOriginalFilename())
            );
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return "index";
    }

Migrated to https://sheltonsuen.github.io

© 著作权归作者所有

聪聪小可爱
粉丝 2
博文 21
码字总数 13039
作品 0
南充
程序员
私信 提问
SpringMVC处理multipart请求.

一、简述 multipart格式的数据会将一个表单拆分为多个部分(part),每个部分对应一个输入域。在一般的表单输入域中,它所对应的部分中会放置文本型数据,但是如果上传文件的话,它所对应的部...

jmcui
2018/01/03
0
0
springmvc - 文件上传

Springmvc 文件上传简介(https://linesh.gitbooks.io/spring-mvc-documentation-linesh-translation/content/publish/21-10/springs-multipart-file-upload-support.html) 使用servlet3 的 ......

中柠檬
2016/11/20
22
0
Spring MVC 实践 - Component

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hanqing280441589/article/details/51831979 标签 : Java与Web Converter Spring MVC的数据绑定并非没有任何...

菜鸟-翡青
2016/07/05
0
0
Spring Web MVC框架(五) 文件上传

Spring同样支持文件上传功能,不过该功能默认未开启,因为可能有些开发者可能希望自己处理文件上传过程。Spring的文件上传功能在包下,有两个实现用来支持文件上传功能,一个是基于Commons F...

过了即是客
2017/02/08
0
0
Spring--文件上传领悟

Spring MVC文件上传领悟 一,问题描述 同样是表单提交,而文件不是明文,是二进制数据,怎么可以上传呢,spring mvc 到底做了什么呢,今天我们就来探讨下 二,解决方案 首先我要说的是sprin...

fajor
2015/09/22
258
0

没有更多内容

加载失败,请刷新页面

加载更多

Kernel 块设备驱动框架

1,总体架构: 块设备驱动框架是Linux设备最重要的框架之一,涉及内核的vfs,设备驱动模型等模块,是内核中异常复杂的一个框架。我们先看一下块设备设计的主要框架结构,先从总体上对块设备有...

yepanl
47分钟前
2
0
iOS开发之EventKit框架的应用

iOS开发之EventKit框架的应用 一、关于系统日历和提醒事宜 iOS系统自带的Calendar应用非常强大,用户可以在其中添加日程事件,并且其提供了接口供其他应用进行调用,可以向日历中进行事件的读...

珲少
50分钟前
2
0
jni接口NewStringUTF崩溃

转载 原文 https://blog.csdn.net/churuxu/article/details/49999575 ndk开发中,将c/c++的UTF8编码的字符串转换成java字符串,使用了NewStringUTF接口。 当字符串中包含emoji字符时,在有些...

shzwork
昨天
3
0
北斗三号IGSO-2卫星发射成功!

6月25日,中国航天科技集团官方公众号宣布,北斗三号IGSO-2卫星发射成功! 航天科技集团表示,6月25日2点09分,我国在西昌卫星发射中心用长征三号乙运载火箭成功将北斗三号第2颗倾斜地球同步...

linuxCool
昨天
3
0
阿里java开发规约的Idea插件安装(英文)

Idea Plugin Prepare Project JDK: 1.7+ Gradle: 3.0+(Require JDK1.8+ for gradle) Build cd p3c-ideagradle clean buildPlugin Run plugin cd p3c-ideagradle runIde# run speci......

Airship
昨天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部