1、配置虚拟目录
在tomcat上配置图片虚拟目录,在tomcat下conf/server.xml中添加:
<Context docBase="F:\develop\upload\temp" path="/pic" reloadable="false"/>
访问http://localhost:8080/pic即可访问F:\develop\upload\temp下的图片。
也可以通过eclipse配置:
2、jar包
CommonsMultipartResolver解析器依赖commons-fileupload和commons-io,加入如下jar包:
3、在SpringMVC.xmlzho中配置解析器
<!-- 文件上传 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传文件的最大尺寸为5MB -->
<property name="maxUploadSize">
<value>5242880</value>
</property>
</bean>
4、jsp页面支持
4.1 form添加enctype="multipart/form-data":
<form id="itemForm" action="${pageContext.request.contextPath }/updateitem.action"
method="post" enctype="multipart/form-data">
4.2 input file属性
file的name与controller形参一致:
<tr>
<td>商品图片</td>
<td>
<c:if test="${item.pic !=null}">
<img src="/pic/${item.pic}" width=100 height=100/>
<br/>
</c:if>
<input type="file" name="pictureFile"/>
</td>
</tr>
5、Controller实现图片上传
// 上传图片
@RequestMapping("/updateitem")
//public String update(Integer id, String name, Float price, String detail) throws Exception{
public String update(MultipartFile pictureFile,Items items, Model model, HttpServletRequest request) throws Exception{
//1. 获取图片完整名称
String fileStr = pictureFile.getOriginalFilename();
//2. 使用随机生成的字符串+源图片扩展名组成新的图片名称,防止图片重名
String newfileName = UUID.randomUUID().toString() + fileStr.substring(fileStr.lastIndexOf("."));
//3. 将图片保存到硬盘
pictureFile.transferTo(new File("E:\\Java_Eclipse\\image\\" + newfileName));
//4.将图片名称保存到数据库
items.setPic(newfileName);
itemService.updateItems(items);
//返回数据
//request.setAttribute("", arg1);
//指定返回的页面(如果controller方法返回值为void,则不走springMvc组件,所以要写页面的完整路径名称)
//request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request, response);
//重定向:浏览器中url发生改变,request域中的数据不可以带到重定向后的方法中
model.addAttribute("id", items.getId());
//在springMvc中凡是以redirect:字符串开头的都为重定向
return "redirect:itemEdit.action";
//请求转发:浏览器中url不发生改变,request域中的数据可以带到转发后的方法中
//model.addAttribute("id", items.getId());
//spirngMvc中请求转发:返回的字符串以forward:开头的都是请求转发,
//后面forward:itemEdit.action表示相对路径,相对路径就是相对于当前目录,当前为类上面指定的items目录.在当前目录下可以使用相对路径随意跳转到某个方法中
//后面forward:/itemEdit.action路径中以斜杠开头的为绝对路径,绝对路径从项目名后面开始算
//return "forward:/items/itemEdit.action";
}