在页面form中提交enctype="multipart/form-data"的数据时,需要springmvc对multipart类型的数据进行解析
Ⅰ、在springmvc.xml中配置multipart类型解析器
<!-- 文件上传 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 设置上传文件的最大尺寸为5MB --> <property name="maxUploadSize"> <value>5242880</value> </property> </bean>
Ⅱ、加入上传图片的jar
1、下载commons-fileupload官方地址:https://commons.apache.org/proper/commons-fileupload/

2、下载commons-io官方地址:https://commons.apache.org/proper/commons-io/
3、创建图片虚拟目录存储图片
3.1、图形化创建虚拟目录

①、双击Tomcat
3.2、直接修改tomcat的配置
在conf/server.xml文件,添加虚拟 目录
<Context docBase="D:workspaceupload" path="/pic" reloadable="true"/>
注意:在图片虚拟目录 中,一定将图片目录分级创建(提高i/o性能),一般我们采用按日期(年、月、日)进行分级创建
④、上传图片页面
<tr> <td>商品图片</td> <td> <c:if test="${items.pic !=null}"> <img src="/pic/${items.pic}" width=100 height=100/> <br/> </c:if> <input type="file" name="items_pic"/> </td> </tr>
⑤、controller方法
@RequestMapping("/editItemsSubmit")
public String editItemsSubmit(Model model, @Validated(value = { ValidGroup1.class }) ItemsCustom itemsCustom,
BindingResult bindingResult, MultipartFile items_pic// 接收商品图片
) throws Exception {
// 获取校验错误信息
if (bindingResult.hasErrors()) {
// 输出错误信息
List<ObjectError> allErrors = bindingResult.getAllErrors();
for (ObjectError objectError : allErrors) {
// 输出错误信息
System.out.println(objectError.getDefaultMessage());
}
// 将错误信息传到页面
model.addAttribute("allErrors", allErrors);
// 可以直接使用model将提交pojo回显到页面
model.addAttribute("items", itemsCustom);
// 出错重新到商品修改页面
return "items/editItems";
}
// 原始名称
String originalFilename = items_pic.getOriginalFilename();
// 上传图片
if (items_pic != null && originalFilename != null && originalFilename.length() > 0) {
// 存储图片的物理路径
String pic_path = "D:\workspace\upload\";
// 新的图片名称
String newFileName = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));
// 新图片
File newFile = new File(pic_path + newFileName);
// 将内存中的数据写入磁盘,主要看看虚拟路径对应的物理路径中有没有这个图片
items_pic.transferTo(newFile);
// 将新图片名称写到itemsCustom中,没有使用数据库,所以就直接返回
itemsCustom.setPic(newFileName);
model.addAttribute("itemsCustom", itemsCustom);
}
return "items/editItems";
}