springmvc 图片上传处理是企业经常用的到的一种技术,下面是该技术的具体过程
图片上传处理实现
步骤:
一、配置虚拟目录并测试
1、在自己的电脑创建一个放图片文件的目录,放入几张图片
2、打开eclipse,打开tomcat Modules
3、创建虚拟目录 点击 Add External Web Modules
相当于在tomcat>server.xml配置了
4、虚拟目录/pic创建完成,启动服务器
5、测试,打开谷歌浏览器输入url http://localhost:8080/pic/xue.jpg 成功,开始编码
二、代码实现
代码注释解析的很清楚,不作过多的说明
1、引入图片上传所需要的jar https://pan.baidu.com/s/1JQIY0y3EwzPJ8H01QsOiqg 提取码:sv3g
2、在springmvc核心配置文件配置多媒体解析器
<!-- 配置多媒体解析器,这里id必须写multipartResolver -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 最大上传大小 8m=8*1024*1024b -->
<property name="maxUploadSize" value="8388608"></property>
</bean>
3、jsp页面
要指定属性:enctype="multipart/form-data",提交方式必须是post
<!-- 上传图片是需要指定属性 enctype="multipart/form-data",必须要post提交-->
<form id="itemForm" action="${pageContext.request.contextPath }/updateItem.action" method="post" enctype="multipart/form-data">
<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>
4、controller层(重点)
参数,MultipartFile pictureFile 名字必须与jsp页面一致
重要逻辑如下图(掌握):
@RequestMapping(value="updateItem", method= {RequestMethod.POST,RequestMethod.GET})
public String updateByItem(Item item, MultipartFile pictureFile) throws IllegalStateException, IOException {
if (pictureFile != null && !pictureFile.isEmpty()) {//选择文件不为空才执行
//使用UUID随机生成图片名字
String imaName = UUID.randomUUID().toString();
//得到图片名称
String filename = pictureFile.getOriginalFilename();
//截取图片后缀名
String imaLastName = filename.substring(filename.lastIndexOf("."));
//创建本地文件流,存放更新后的图片的位置
File file = new File("E:\\images\\" + imaName + imaLastName);
//存储到本地仓库
pictureFile.transferTo(file);
//更新数据库
item.setPic(imaName + imaLastName);
System.out.println(item);
}
itemService.updateByItem(item);
return "forward:item.action";
}
注意:没有指定enctype="multipart/form-data"提交、post提交、本地file路径写错是最容易造成图片上传错误!