zoukankan      html  css  js  c++  java
  • jsp+ssm+tomcat+ueditor上传定时处理无用文件

    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();
    }
    }
    }
    }
    }
  • 相关阅读:
    CacheHelper
    自动完成 或者动态匹配
    http://www.jb51.net/article/28619.htm
    http://www.kindsoft.net/docs/qna.html
    开发测试的理想模型
    关于浮点数的死区问题
    ZOJ Problem Set – 2321 Filling Out the Team
    Input类、四元数、
    忙蒙蔽了
    2014-03-28
  • 原文地址:https://www.cnblogs.com/liuyuanchen/p/12697138.html
Copyright © 2011-2022 走看看