关于重启项目layui富文本编辑器图片显示问题

之前提到使用layui富文本编辑器写项目,后期测试的时候发现了一个问题,就是项目重启之后图片找不到了
在这里插入图片描述
当我登录进去打开后台管理的时候,发现后台也出问题了
在这里插入图片描述
这就有意思了,我就看了看自己 的代码(之前博客上面的),
String rootPath = request.getSession().getServletContext().getRealPath("/image/"); File newFile = new File(rootPath+newfilename);
发现我是把文件储存在Tomcat的临时目录里面,当项目重启的时候,Tomcat会建立一个新的临时目录来进行储存和访问,我们访问的图片就是储存在这里面,但是每次重启就会新建一个,所以前端请求的时候就会出undefined。这个时候就要考虑换个思路解决问题,既然问题的原因是重启之后找不到文件了,那么我就把目录固定了,所以我就换了一个储存方式

@RequestMapping(value = "/uploud", method = RequestMethod.POST)
	@ResponseBody
	public Map<String,Object> Uploadimgs(@RequestParam MultipartFile file) {
		Map<String,Object> mv=new HashMap<String, Object>();
		Map<String, String> mvv = new HashMap<String, String>();
		String fileExtension =  file.getOriginalFilename().substring( file.getOriginalFilename().indexOf("."));//得到后缀名
		String papername= UUID.randomUUID().toString().replace("-", "") + "." + fileExtension;//生成一个UUID为图片命名
		String imagepath = "layuimg\\" + papername;
		File destfile = new File(System.getProperty("user.home") + "\\" + imagepath);//放到系统文件夹
		System.out.println(destfile.getPath());
		try {
			if (!destfile.exists()) {//没有就新建
				destfile.mkdirs();
			}
			file.transferTo(destfile);
			mvv.put("src", "/showimg/" + papername);//返回一个地址,这个地址不是文件的储存地址,而是前端访问地址
            mvv.put("title",imagepath);
            mv.put("code", 0);
    		mv.put("msg", "上传成功");
    		mv.put("data", mvv);
    		return mv;
		} catch (IllegalStateException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
			 mv.put("success", 1);
     		return mv;
		}
		return mv;
	}

解决了文件的存储问题,那么我们看一下文件的展示问题,之前因为在Tomcat运行文件夹下面,所以可以通过路径访问,既然现在我们把图片放到了系统目录里面,那么我们就写个接口返回图片

@RequestMapping(value = "/showimg/{name}")
	@ResponseBody
	public void loadrichtext(@PathVariable String name, HttpServletResponse response) {
		File file = new File(System.getProperty("user.home") + "\\" + "layuimg\\" + name);
		ServletOutputStream out = null;
		try {
			FileInputStream in = new FileInputStream(file);
			out = response.getOutputStream();
			byte[] bytes = new byte[1024 * 100];
			int length = 0; // 读取长度
			while ((length = in.read(bytes)) != -1) {
				out.write(bytes, 0, length);
			}
			out.flush();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

前面返回的路径中写的mvv.put("src", "/showimg/" + papername);那么接口路径就要改为showimg别整错了,这个时候我们再试试,发现可以使用了,再重启也没问题了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值