<%@page import="com.zkingsoft.constance.Dictionary"%> 
 | 
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 
 | 
<%@ page import="java.util.*,java.io.*" %> 
 | 
<%@ page import="java.text.SimpleDateFormat" %> 
 | 
<%@ page import="org.json.simple.*" %> 
 | 
<% 
 | 
  
 | 
/** 
 | 
 * KindEditor JSP 
 | 
 * 
 | 
 * 本JSP程序是演示程序,建议不要直接在实际项目中使用。 
 | 
 * 如果您确定直接使用本程序,使用之前请仔细确认相关安全设置。 
 | 
 * 
 | 
 */ 
 | 
//根目录路径,可以指定绝对路径,比如 /var/www/attached/ 
 | 
String rootPath = Dictionary.SAVE_PATH; 
 | 
//根目录URL,可以指定绝对路径,比如 http://www.yoursite.com/attached/ 
 | 
String rootUrl  = Dictionary.SAVE_URL; 
 | 
  
 | 
  
 | 
  
 | 
  
 | 
  
 | 
//图片扩展名 
 | 
String[] fileTypes = new String[]{"gif", "jpg", "jpeg", "png", "bmp"}; 
 | 
  
 | 
String dirName = request.getParameter("dir"); 
 | 
if (dirName != null) { 
 | 
    if(!Arrays.<String>asList(new String[]{"article", "image", "media", "file"}).contains(dirName)){ 
 | 
        out.println("Invalid Directory name."); 
 | 
        return; 
 | 
    } 
 | 
    rootPath += dirName + "/"; 
 | 
    rootUrl += dirName + "/"; 
 | 
    File saveDirFile = new File(rootPath); 
 | 
    if (!saveDirFile.exists()) { 
 | 
        saveDirFile.mkdirs(); 
 | 
    } 
 | 
} 
 | 
//根据path参数,设置各路径和URL 
 | 
String path = request.getParameter("path") != null ? request.getParameter("path") : ""; 
 | 
String currentPath = rootPath + path; 
 | 
String currentUrl = rootUrl + path; 
 | 
String currentDirPath = path; 
 | 
String moveupDirPath = ""; 
 | 
if (!"".equals(path)) { 
 | 
    String str = currentDirPath.substring(0, currentDirPath.length() - 1); 
 | 
    moveupDirPath = str.lastIndexOf("/") >= 0 ? str.substring(0, str.lastIndexOf("/") + 1) : ""; 
 | 
} 
 | 
  
 | 
//排序形式,name or size or type 
 | 
String order = request.getParameter("order") != null ? request.getParameter("order").toLowerCase() : "name"; 
 | 
  
 | 
//不允许使用..移动到上一级目录 
 | 
if (path.indexOf("..") >= 0) { 
 | 
    out.println("Access is not allowed."); 
 | 
    return; 
 | 
} 
 | 
//最后一个字符不是/ 
 | 
if (!"".equals(path) && !path.endsWith("/")) { 
 | 
    out.println("Parameter is not valid."); 
 | 
    return; 
 | 
} 
 | 
//目录不存在或不是目录 
 | 
File currentPathFile = new File(currentPath); 
 | 
if(!currentPathFile.isDirectory()){ 
 | 
    out.println("Directory does not exist."); 
 | 
    return; 
 | 
} 
 | 
  
 | 
//遍历目录取的文件信息 
 | 
List<Hashtable> fileList = new ArrayList<Hashtable>(); 
 | 
if(currentPathFile.listFiles() != null) { 
 | 
    for (File file : currentPathFile.listFiles()) { 
 | 
        Hashtable<String, Object> hash = new Hashtable<String, Object>(); 
 | 
        String fileName = file.getName(); 
 | 
        if(file.isDirectory()) { 
 | 
            hash.put("is_dir", true); 
 | 
            hash.put("has_file", (file.listFiles() != null)); 
 | 
            hash.put("filesize", 0L); 
 | 
            hash.put("is_photo", false); 
 | 
            hash.put("filetype", ""); 
 | 
        } else if(file.isFile()){ 
 | 
            String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase(); 
 | 
            hash.put("is_dir", false); 
 | 
            hash.put("has_file", false); 
 | 
            hash.put("filesize", file.length()); 
 | 
            hash.put("is_photo", Arrays.<String>asList(fileTypes).contains(fileExt)); 
 | 
            hash.put("filetype", fileExt); 
 | 
        } 
 | 
        hash.put("filename", fileName); 
 | 
        hash.put("datetime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(file.lastModified())); 
 | 
        fileList.add(hash); 
 | 
    } 
 | 
} 
 | 
  
 | 
if ("size".equals(order)) { 
 | 
    Collections.sort(fileList, new SizeComparator()); 
 | 
} else if ("type".equals(order)) { 
 | 
    Collections.sort(fileList, new TypeComparator()); 
 | 
} else { 
 | 
    Collections.sort(fileList, new NameComparator()); 
 | 
} 
 | 
JSONObject result = new JSONObject(); 
 | 
result.put("moveup_dir_path", moveupDirPath); 
 | 
result.put("current_dir_path", currentDirPath); 
 | 
result.put("current_url", currentUrl); 
 | 
result.put("total_count", fileList.size()); 
 | 
result.put("file_list", fileList); 
 | 
  
 | 
response.setContentType("application/json; charset=UTF-8"); 
 | 
out.println(result.toJSONString()); 
 | 
%> 
 | 
<%! 
 | 
public class NameComparator implements Comparator { 
 | 
    public int compare(Object a, Object b) { 
 | 
        Hashtable hashA = (Hashtable)a; 
 | 
        Hashtable hashB = (Hashtable)b; 
 | 
        if (((Boolean)hashA.get("is_dir")) && !((Boolean)hashB.get("is_dir"))) { 
 | 
            return -1; 
 | 
        } else if (!((Boolean)hashA.get("is_dir")) && ((Boolean)hashB.get("is_dir"))) { 
 | 
            return 1; 
 | 
        } else { 
 | 
            return ((String)hashA.get("filename")).compareTo((String)hashB.get("filename")); 
 | 
        } 
 | 
    } 
 | 
} 
 | 
public class SizeComparator implements Comparator { 
 | 
    public int compare(Object a, Object b) { 
 | 
        Hashtable hashA = (Hashtable)a; 
 | 
        Hashtable hashB = (Hashtable)b; 
 | 
        if (((Boolean)hashA.get("is_dir")) && !((Boolean)hashB.get("is_dir"))) { 
 | 
            return -1; 
 | 
        } else if (!((Boolean)hashA.get("is_dir")) && ((Boolean)hashB.get("is_dir"))) { 
 | 
            return 1; 
 | 
        } else { 
 | 
            if (((Long)hashA.get("filesize")) > ((Long)hashB.get("filesize"))) { 
 | 
                return 1; 
 | 
            } else if (((Long)hashA.get("filesize")) < ((Long)hashB.get("filesize"))) { 
 | 
                return -1; 
 | 
            } else { 
 | 
                return 0; 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
} 
 | 
public class TypeComparator implements Comparator { 
 | 
    public int compare(Object a, Object b) { 
 | 
        Hashtable hashA = (Hashtable)a; 
 | 
        Hashtable hashB = (Hashtable)b; 
 | 
        if (((Boolean)hashA.get("is_dir")) && !((Boolean)hashB.get("is_dir"))) { 
 | 
            return -1; 
 | 
        } else if (!((Boolean)hashA.get("is_dir")) && ((Boolean)hashB.get("is_dir"))) { 
 | 
            return 1; 
 | 
        } else { 
 | 
            return ((String)hashA.get("filetype")).compareTo((String)hashB.get("filetype")); 
 | 
        } 
 | 
    } 
 | 
} 
 | 
%> 
 |