155 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			155 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 
								 | 
							
								<%@ 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 = pageContext.getServletContext().getRealPath("/") + "attached/";
							 | 
						|||
| 
								 | 
							
								//根目录URL,可以指定绝对路径,比如 http://www.yoursite.com/attached/
							 | 
						|||
| 
								 | 
							
								String rootUrl  = request.getContextPath() + "/attached/";
							 | 
						|||
| 
								 | 
							
								//图片扩展名
							 | 
						|||
| 
								 | 
							
								String[] fileTypes = new String[]{"gif", "jpg", "jpeg", "png", "bmp"};
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								String dirName = request.getParameter("dir");
							 | 
						|||
| 
								 | 
							
								if (dirName != null) {
							 | 
						|||
| 
								 | 
							
									if(!Arrays.<String>asList(new String[]{"image", "flash", "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"));
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								%>
							 |