需求
上传商品图片
Springmvc中对多部件类型解析
在页面form中提交enctype=“multiparty /form-data”的数据时,需要springmvc对multiparty类型的数据进行解析。
在springmvc.xml中配置multiparty类型解析器:
<!-- 文件上传解析器 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传文件的最大尺寸为5MB -->
<property name="maxUploadSize">
<value>5242880</value>
</property>
</bean>
导入上传图片的jar包
commons-fileupload-1.4.jar、commons-io-2.6.jar
创建图片虚拟目录,存储图片
双击服务器àmodulesàAdd External …
注意:在图片虚拟目录中,一定将图片目录分级创建(提高i/o性能),一般我们采用按日期(年、月、日)进行分级创建。
Jsp页面
<tr><td>商品图片</td>
<td>
<c:if test="${itemsList.pic!=null }">
<img src="/pic/${itemsList.pic }" width="100" height="100" /><br/>
</c:if>
<input type="file" name="items_pic" />
</td>
</tr>
在form表单属性中添加enctype="multipart/form-data"方可成功!
Controller方法
@RequestMapping("/editItemsSubmit")
public String editItemsSubmit(Model model, HttpServletRequest request, Integer id,
@ModelAttribute("itemsList") @Validated(value = { ValidGroup1.class }) ItemsCustom itemsCustom,
BindingResult bindingResult,MultipartFile items_pic) throws Exception {
// 获取校验错误信息
… …
//原始名称
String originalFileName=items_pic.getOriginalFilename();
//上传图片
if(items_pic!=null && originalFileName!=null && originalFileName.length()>0){
//存储图片的物理路径
String pic_path="D:\\img\\";
//新的图片名称
String newFileName=UUID.randomUUID()+
originalFileName.substring(originalFileName.lastIndexOf("."));
//新图片
File newFile=new File(pic_path+newFileName);
//将内存中的数据写入磁盘
items_pic.transferTo(newFile);
//将新图片名称写到itemsCustom中
itemsCustom.setPic(newFileName);
}
itemsService.updateByPrimaryKeyWithBLOBs(id, itemsCustom);
return "redirect:findItemsList.action";
}