ueditor上传bug,选择图片上传后在编辑器删除照片,服务器不会自动删除,会出现很多无用文件,占用资源。
这里有一个不成熟的方法,查询数据库里的图片,在查询服务器里的文件,判断服务器里的照片在数据库中存不存在,不存在久删除,但是这个方法吧如果有文件很多,就会耗时会比较长,不利于程序的运行。
话不多说附上代码:
一、读取文件夹中所有文件
//获取图片文件
public List<String> imgname(){
String pathUrl=System.getProperty("bookdir");//获取项目路劲到WebContent
List<String> names=new ArrayList<String>();
/*new filenameFilter接口,重写接口内部的一个方法*/
String path=pathUrl.substring(0,pathUrl.length()-1)+"/images";
File file=new File(path);
File[] list=file.listFiles();
for(int i=0;i<list.length;i++) {
if (list[i].isFile()) {//判断是文件
names.add(list[i].getName());//保存所i有文件
} else {
}
}
return names;
}
//获取所有视频文件
public List<String> videoname(){
String pathUrl=System.getProperty("bookdir");
List<String> names=new ArrayList<String>();
/*new filenameFilter接口,重写接口内部的一个方法*/
String path=pathUrl.substring(0,pathUrl.length()-1)+"/upload";
File file=new File(path);
File[] list=file.listFiles();
for(int i=0;i<list.length;i++) {
if (list[i].isFile()) {//判断是文件
names.add(list[i].getName());//保存所i有文件
} else {
}
}
return names;
}
//定时清理
@Scheduled(cron = "0 0 0 ? * MON")//每周一凌晨0点
public void payTime(){
Set<String> imgtypes=new HashSet<String>();//图片类型
// images
imgtypes.add("jpg");
imgtypes.add("png");
imgtypes.add("gif");
imgtypes.add("tif");
imgtypes.add("bmp");
Set<String> videotypes=new HashSet<String>();//视频类型(这两类型可以单独封装起来)
//视频或音频类
videotypes.add("avi");
videotypes.add("mpg");
videotypes.add("mov");
videotypes.add("mp4");
//截取图片、视频名字(因为富文本编辑器里的图片和文字都是以标签的形式出现)
String img = "";
Pattern p_image;
Matcher m_image;
String regEx_img="";
Set<String> paths=new HashSet<String>();//数据库中图片名
Set<String> videopaths=new HashSet<String>();//视频名
List<String> anserPo=anserService.allAnser();//查询数据库获取全部富文本框内容
for (String a:anserPo ) {
regEx_img = "<img.*src\\s*=\\s*(.*?)[^>]*?>";//img标签正则
p_image = Pattern.compile(regEx_img, Pattern.CASE_INSENSITIVE);
m_image = p_image.matcher(a);
while (m_image.find()) {
// 得到<img />数据
img = m_image.group();
// 匹配<img>中的src数据
Matcher m = Pattern.compile("src\\s*=\\s*\"?(.*?)(\"|>|\\s+)").matcher(img);
while (m.find()) {
String imgss=m.group(1);
Integer index=imgss.lastIndexOf("/");
String after=imgss.substring(index+1,imgss.length());//截取名称
paths.add(after);
}
}
regEx_img = "<video.*src\\s*=\\s*(.*?)[^>]*?>";//截取video标签
p_image = Pattern.compile(regEx_img, Pattern.CASE_INSENSITIVE);
m_image = p_image.matcher(a);
while (m_image.find()) {
// 得到<img />数据
img = m_image.group();
// 匹配<img>中的src数据
Matcher m = Pattern.compile("src\\s*=\\s*\"?(.*?)(\"|>|\\s+)").matcher(img);
while (m.find()) {
String imgss=m.group(1);
Integer index=imgss.lastIndexOf("/");
String after=imgss.substring(index+1,imgss.length());
videopaths.add(after);
}
}
}
System.out.println(imgname());
System.out.println(videoname());
for (String s:imgname()) {//循环磁盘中的图片
Integer type = s.lastIndexOf(".");
String imgtype = s.toString().substring(type + 1, s.length());//获取图片类型
String pathUrl = System.getProperty("bookdir");
if (imgtypes.contains(imgtype)) {//判断是否是图片
if (paths.contains(s)==false) {//判断图片是否多余(本地图片在数据库中不存在)
String url = pathUrl.substring(0, pathUrl.length() - 1) + "/images/" + s;
String path2 = url.toString().replace("/", "\\");
File file = new File(path2);
if (file.exists()) {
file.delete();//删除多余图片
}
}
}
}
for (String s:videoname()) {//循环磁盘中的视频文件
Integer type = s.lastIndexOf(".");
String imgtype = s.toString().substring(type + 1, s.length());
String pathUrl = System.getProperty("bookdir");
if (videotypes.contains(imgtype)) {//是否为视频
if (videopaths.contains(s)==false) {//判断视频是否多余(本地视频在数据库中不存在)
String url = pathUrl.substring(0, pathUrl.length() - 1) + "/upload/" + s;
String path2 = url.toString().replace("/", "\\");
File file = new File(path2);
if (file.exists()) {
file.delete();
}
}
}
}
}