之前提到使用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别整错了,这个时候我们再试试,发现可以使用了,再重启也没问题了。