SpringMVC 文件上传
Servlet3.0规范已经提供方法来处理文件上传,但这种上传需要在Servlet中完成。而Spring MVC则提供了更简单的封装。
Spring MVC为文件上传提供了直接的支持,这种支持是用即插即用的MultipartResolver实现的。Spring MVC使用Apache Commons FileUpload技术实现了一个MultipartResolver实现类:CommonsMultipartResolver。因此,SpringMVC的文件上传还需要依赖Apache Commons FileUpload的组件。
这里在用Maven做一个简单无线点餐的后台系统案例时,用到这个知识点来操作菜品的图片。(jar包是必备的)
- 这里是用的bootstrap写的添加菜品的表单, 截取和简写了其中上传图片的部分
<div class="modal-body">
<form class="form-horizontal" id="new_food_form" enctype="multipart/form-data">
<div class="form-group">
<label for="new_img" class="col-sm-2 control-label"> 菜品图片</label>
<div class="col-sm-10">
<input type="file" class="form-control" id="file" name="file" />
<input type="submit" value="上传">
</div>
</div>
</form>
</div>
这里比较要注意的就是负责上传文件的表单的编码类型必须是“multipart/form-data”。
- applicationContext.xml配置中配置 (这里需求不多,有其他需求可百度multipartResolver配置详情)
<!-- 图片获取 maxUploadSize:设置最大限制 字节为单位
限制不是针对单个文件,而是所有文件的容量之和-->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="1024000"></property>
</bean>
- 在来看看控制器(截取操作MultipartFile 的片段)
@RequestMapping(value="/createFood",method=RequestMethod.POST)
@ResponseBody
public String createFood(@RequestParam(value = "file", required = false)MultipartFile file,HttpServletRequest request) throws IOException {
if (file != null) {
//获取文件名
String fileName = file.getOriginalFilename();
//从request中取,得到webapp路径
String dir = request.getServletContext().getRealPath("/");
//拼接文件夹
String saveDir = dir + "images/";
String path = saveDir+fileName;
// 转存文件到指定的路径
file.transferTo(new File(path));
}
学生..初来乍到,不喜勿喷。只为保持学习状态。谢谢= =。