spring实战-Spring文件上传MultipartFile

来源:互联网 发布:域名注册 便宜 编辑:程序博客网 时间:2024/05/23 22:18

第六篇spring实战-Spring文件上传MultipartFile

在构建网站是,处理文件上传功能是必须的,比如创建用户需要用户上传头像,创建服务器列表需要上传Excel文件等等

在Springmvc中对文件上传做了比较好的支持,同时支持基于Servlet3.0的标准multipart请求(StandardServletMultipartResolver),也支持基于Jakarta的Commons FileUpload(CommonsMultipartResolver

下面主要展示标准Servlet3.0支持的方式,也推荐这种方式

1,需要在TilesWebConfig中配置MultipartResolver

/** * 使用以来servet3.0的标准multipart解析器 * @return */@Beanpublic MultipartResolver multipartResolver() {return new StandardServletMultipartResolver();}
2,需要在IdatWebAppInitializer中配置MultipartConfigElement

/** * 设置Servlet支持文件上传 * 并且上传的文件保存临时路径在/tmp/idat/uploads路径下面 * 单个文件大小不超过2M,一次上传所有文件大小总和不超过4M,0表示文件个数不限 * 如果文件大小超过限制,则会保存到临时路径下 */ @Overrideprotected void customizeRegistration(Dynamic registration) {registration.setMultipartConfig(new MultipartConfigElement("d:/idat/uploads",2097152,4194304,0));super.customizeRegistration(registration);}

3,文件上传表单form支持multipart/form-data

<form:form method="POST" commandName="interface" enctype="multipart/form-data"><form:errors path="*" element="div" cssClass="errors"></form:errors><table>.......<tr><td>logo</td><td><input type="file" name="logo" /></td></tr></table><input type="submit" value="create" /></form:form>
4,处理控制器,接受并处理MultipartFile

/** * 直接接受对象类型Interface 作为入参 * form表单中input的属性name和Interface的属性一一对应 * 注解@Valid启用校验功能,会按着Interface中属性的校验规则来校验入参 * 需要住的是后面的Errors参数需要紧跟@Valid注解的变量后面,error返回该校验参数的校验结果 * 但是如果希望Valid生效,还需要hibernate-validator包,或者同类实现Java Validation API的包 * @param intf * @return * @throws FileNotFoundException  */@RequestMapping(value = "/create", method=RequestMethod.POST)public String create(@Valid Interface intf, Errors errors, @RequestPart("logo") MultipartFile logo) throws IOException{// 如果校验不通过的话,返回创建表单页面if (errors.hasErrors()) {return "createForm";}String originalFilename = logo.getOriginalFilename();FileOutputStream fileOutputStream = new FileOutputStream("d:/idat/"+originalFilename);fileOutputStream.write(logo.getBytes());fileOutputStream.flush();fileOutputStream.close();Interface rintf = idatService.save(intf);// 当视图解析器遇到 redirect:时,把他解析为重定向的规则,还有一个forward:// 具体redirect 和 forward 的区别 请参考 http://blog.csdn.net/tidu2chengfo/article/category/6993805return "redirect:queryInterfacesByName/" + rintf.getName() + "/intf";}

至此,我们便完成了从客户端向服务器上传提交文件

阅读全文
0 0