今天学习springmvc上传图片时,遇到了UUID图片无法读取的问题(404错误):
根据网上流程:先配置好虚拟目录和springmvc.xml的文件上传,再写好控制器和页面,最后结果如下所示
环境:MyEclipse2017,使用的是自带的tomcat
另外:以下问题只针对myeclipse自带的tomcat,我在装了本地tomcat以后,测试发现没有出现以下问题
如下所示: server.xml
<Context docBase="E:\Java_pic" path="/pic" reloadable="false"></Context>
控制器:(使用UUID重新存储文件名)
//上传图片
if(items_pic!=null){
//存储图片的物理路径
String pic_path="E:\\Java_pic\\";
//原始名称
String originalFilename=items_pic.getOriginalFilename();
//新图片名称
StringnewFileName=UUID.randomUUID()+
originalFilename.substring(originalFilename.lastIndexOf("."));
//新图片
File newFile=new File(pic_path+newFileName);
//将内存中的数据写入磁盘
items_pic.transferTo(newFile);
//在itemsCustom中添加pic的路径
//添加的是虚拟路径
String virtualPath=newFileName;
itemsCustom.setPic(virtualPath);
}
页面
<tr>
<td>图片</td>
<td>
<c:if test="${items.pic!=null }">
<img src="/pic/${items.pic }" width=100 height=100/>
<br/>
</c:if>
<input type="file" name="items_pic"/>
</td>
</tr>
但是最终点击提交以后,页面中的img位置有填充,但是并没有显示出图片,数据库中有图片名,虚拟目录对应的物理路径下也有图片,点击查看图片,报错404,
当时这个问题调试了很长时间,最后发现是在写这段代码中间重新部署了项目导致server.xml的虚拟目录的配置代码被删除了,因此重新发布需要再次配置虚拟目录(建议备份虚拟目录,每次部署的时候可以方便配置):
如图所示,server.xml需要重新配置
注意:是重新部署,重新启动或者调试server并不会初始化server.xml
效果如下
另外需要说明的是,在多次调试,server.xml时常被修改(Restart项目时),目前还没有找到原因
解决方案:从官网下载tomcat,使用本地tomcat不会出现此类问题
希望有懂这方面的大佬能够指点一下,在下感激不尽