SpringMVC上传图片
1.问题说明:
在我们平时练习时,上传图片都是上传到Tomcat服务上,但是这样的缺点也是显而易见的,那就是随着Tomcat服务器的重启,所上传的图片也会随之被清空,所以要想在服务器重启时图片不被清空,我们可以在Tomcat中配置虚拟路径,将我们上传图片的路径映射到硬盘上以解决服务器重启后图片消失问题.
2.配置虚拟路径:
在tomcat下conf/server.xml中添加:
<Context docBase="E:\test\" path="/pic" reloadable="false"/>
访问http://localhost:8080/pic即可访问E:\test\下的图片。
也可以通过eclipse配置,如下图:
3.加入文件上传jar包:
把两个jar包放到工程的lib文件夹中
4.在springmvc.xml中配置文件上传解析器
<!-- 上传图片配置实现类 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="50000000"></property>
</bean>
5.jsp页面的准备:
<tr>
<td>商品图片</td>
<td>
<c:if test="${item.pic !=null}">//配置的虚拟路径会将localhost:8080/pic/xxx.jpg映射到E:/test目录下相应的图片文件
<img src="/pic/${item.pic}" width=100 height=100/>
<br/>
</c:if>
<input type="file" name="pictureFile"/>
</td>
</tr>
设置表单可以进行文件上传,如下:
<form id="itemForm" action="${pageContext.request.contextPath}//updateitem.action" method="post" enctype="multipart/form-data">
6.上传图片Controller:
@RequestMapping("/updateitem.action")
public String saveItems(QueryVo vo,MultipartFile pictureFile) throws Exception {
//保存图片到E:\test 为上传的图片生成图片名
String name = UUID.randomUUID().toString().replaceAll("-", "");
//获取文件后缀名
String ext = FilenameUtils.getExtension(pictureFile.getOriginalFilename());
//保存图片到指定地点
pictureFile.transferTo(new File("E:\\test\\" + name + "." + ext));
//保存到数据库
vo.getItems().setPic(name + "." + ext);
itemsService.saveEditItems(vo.getItems());
return "redirect:/itemsEdit.action?id=" + vo.getItems().getId() ;
}
到此,图片上传结束.