您的位置:首页 > 编程语言 > Java开发

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

2016-11-06 00:00 706 查看
摘要: 学习Spring MVC的过程中,了解了配置multipart解析器,写个笔记记录下来。

#概述

尽管一般表单提交足以满足对典型的基本文本提交,但是当面对传送二进制数据,例如图片,视频等就显得力不从心了。与之不同的是,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

将其声明位Spring上下文中的一个Bean

@Bean
public MultipartResolver multipartResolver() throws IOException {
return new StandardServletMultipartResolver();
}


配置 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";
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐