SSM图片上传及重新部署项目图片丢失解决方案

SSM图片上传及重新部署项目图片丢失解决方案

原来上传图片可能存在的问题
现象: 图片上传后,一旦项目重新部署或者在eclipse修改代码重启后,之前上传的图片丢失,在页面上无法展示。
原因: 之前的图片文件上传都是保存在项目目录下,request.getServletContext().getRealPath("/");一旦项目重新部署,项目启动后创建上传的图片因为放在项目下会随着项目被清理掉,恢复到最初项目的文件状态,造成图片丢失。
解决思路: 尝试将图片上传路径改为项目的同级目录,
new File(request.getServletContext().getRealPath("/")).getParentFile();
这样图片没有保存在项目下,即使项目重新部署也不会影响到上传的图片文件。访问图片时直接访问图片在tomcat服务器的访问路径即可。服务器ip+tomcat端口号+图片路径 即:
<img src=<%=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort() %>/${imgUrl} />

在ssm框架搭建完成后,步骤如下:

  1. jar包准备
    commons-fileupload-1.3.1和 commons-io-2.4
    jar包资源路径:https://download.csdn.net/download/u013838592/11245010
  2. 在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>
  1. 设置上传页面form表单
    ①表单的请求方式必须设为 method =“post”
    ②加上 enctype=“multipart/form-data” 属性
  2. 后端代码实现
    注意: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();
			}
		}
	}
  1. 图片显示img的url写法
    <img src=<%=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort() %>/${imgUrl} />
    获取tomcat部署目录下的文件访问路径,如:http://localhost:8080/images/uploads/dsads-sdsd-231-cat.jpg
  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朝涯浅浅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值