先用idea设置虚拟目录,点击加号,选择本地的一个文件夹作为图片存放的虚拟目录。
然后设置路径为:/pic
这样用服务器登陆:http://localhost:8080/pic/xxxxx.jpg
ssm项目内:
1.添加Apache文件上传jar包
首先需要下载两个apache上传文件的jar包commons-fileupload-1.3.1.jar
commons-io-2.4.jar
在controller层:
在原来update方法上增加:形参上增加 MultipartFile pictureFile,用于接收图片
为什么items类中其他数据可以操作service层--操作dao层就可以完成数据变化。但是这个pic属性items类里也有为什么不行呢》
因为图片这个数据接收不过来,必须要用MultipartFile 接过来,然后修改一下才能放到数据库中去。
- 获取文件原始名称
String name = pictureFile.getOriginalFilename();- 保存图片到项目的虚拟目录去
pictureFile.transferTo(new File("F:\\pic\\"+name));保存图片数据到数据库
items.setPic(name+"."+ext);itemService.update(items);
将数据填充到jsp逻辑视图
model.addAttribute("item",items);
@RequestMapping("updateitem")
public String update(Model model, Items items, MultipartFile pictureFile) throws Exception {
获取文件原始名称
String name = pictureFile.getOriginalFilename();
文件扩展名
String ext = FilenameUtils.getExtension(name);
保存图片到
pictureFile.transferTo(new File("F:\\pic\\"+name+"."+ext));
保存图片数据到数据库
items.setPic(name+"."+ext);
itemService.update(items);
model.addAttribute("item",items);
return "success";
JSP页面
而MultipartFile的参数名必须要与jsp页面中的<input>标签的name一致
而且:form表单的属性加上enctype="multipart/form-data"
<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>
springmvc.xml
MultipartFile本身只是一个接口,必须要有实现类来实现接收图片的操作,而这个实现类已经帮我们写好了,只需要在springmvc.xml中配置即可。
而且这个实现类的id必须是multipartResolver
<!--上传图片配置实现类-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--控制上传图片的大小-->byte为单位
<property name="maxInMemorySize" value="5242880"/>
</bean>
问题:
经过上面controller层的代码,随便图片上传到数据库了,也保存到虚拟路径了,但是出现了扩展名多余且重复的问题。
变成了xxxx.jpg.jpg
经过测试发现,完全不需要这个截取文件扩展名,直接用name输出即可。
文件扩展名
String ext = FilenameUtils.getExtension(name);