SSM图片上传及重新部署项目图片丢失解决方案
原来上传图片可能存在的问题
现象: 图片上传后,一旦项目重新部署或者在eclipse修改代码重启后,之前上传的图片丢失,在页面上无法展示。
原因: 之前的图片文件上传都是保存在项目目录下,request.getServletContext().getRealPath("/");
一旦项目重新部署,项目启动后创建上传的图片因为放在项目下会随着项目被清理掉,恢复到最初项目的文件状态,造成图片丢失。
解决思路: 尝试将图片上传路径改为项目的同级目录,
new File(request.getServletContext().getRealPath("/")).getParentFile();
这样图片没有保存在项目下,即使项目重新部署也不会影响到上传的图片文件。访问图片时直接访问图片在tomcat服务器的访问路径即可。服务器ip+tomcat端口号+图片路径 即:
<img src=<%=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort() %>/${imgUrl} />
在ssm框架搭建完成后,步骤如下:
- jar包准备
commons-fileupload-1.3.1和 commons-io-2.4
jar包资源路径:https://download.csdn.net/download/u013838592/11245010 - 在springmvc的xml文件中配置Multipart解析器
<bean id="multipartResolver" class= "org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置请求编码格式-->
<property name="defaultEncoding" value="UTF-8" />
<!-- 最大内存大小 -->
<property name="maxInMemorySize" value="10240"/>
<!-- 最大文件大小,-1为不限制大小 -->
<property name="maxUploadSize" value="-1"/>
</bean>
- 设置上传页面form表单
①表单的请求方式必须设为 method =“post”
②加上 enctype=“multipart/form-data” 属性 - 后端代码实现
注意:MultipartFile file 这个要放在参数列表第一位
public void upload(@RequestParam("uploadfile") MultipartFile file,HttpServletRequest request) {
if(null != file && StringUtils.isNoneEmpty(file.getOriginalFilename())) {
// 获取上传文件的原始名称
String originalFilename = file.getOriginalFilename();
//获取项目部署目录根 (此处为tomcat下的webapps目录路径如 D:\apache-tomcat-7.0.92\webapps,避免项目重新部署后上传的文件被清除丢失)
File rootPath = new File(request.getServletContext().getRealPath("/")).getParentFile();
File uploadFile = new File(rootPath.getPath()+"/images/upload/");
// 如果保存文件的地址不存在,就先创建目录
if (!uploadFile.exists()) {
uploadFile.mkdirs();
}
String newFilename = UUID.randomUUID() + "_"+originalFilename;
String url=rootPath.getPath()+"/images/upload/"+newFilename;
//文件路径url 如: D:\apache-tomcat-7.0.92\webapps\images\uploads\dsads-sdsd-231-cat.jpg
System.out.println("/images/upload/"+newFilename);
try {
// 使用MultipartFile接口的方法完成文件上传到指定位置
file.transferTo(new File(url));
} catch (Exception e) {
e.printStackTrace();
}
}
}
- 图片显示img的url写法
<img src=<%=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort() %>/${imgUrl} />
获取tomcat部署目录下的文件访问路径,如:http://localhost:8080/images/uploads/dsads-sdsd-231-cat.jpg