主题: 3.4版本服务器图片浏览jsp程序 |
作者: 零度可乐, 发布日期: 2010-02-22 11:32:34, 浏览数: 5451 |
<%@page import="java.net.URLDecoder"%>
<%@ page language="java" contentType="text/html;charset=GBK"%> <%@ page import="java.util.*,java.io.File,java.util.regex.Pattern,java.text.SimpleDateFormat"%> <%@ page import="org.apache.commons.fileupload.*,org.apache.commons.lang.StringUtils,org.apache.commons.lang.time.DateFormatUtils,org.apache.commons.io.FileUtils"%> <% // 绝对路径和相对路径 String jsp_path = request.getSession().getServletContext().getRealPath("/"); String jsp_url = request.getContextPath(); // 根目录路径,可以指定绝对路径,比如 /var/www/attached/ String root_path = jsp_path + "resources/news/newsConstantImages/"; // 根目录URL,可以指定绝对路径,比如 http://www.yoursite.com/attached/ String root_url = jsp_url + "/resources/news/newsConstantImages/"; //根据path参数,设置各路径和URL(除根目录之外所有子目录名称) String path = request.getParameter("path"); // 当前路径 String current_path = ""; // 当前URL String current_url = ""; // 当前子路径 String current_dir_path = ""; // 上级路径 String moveup_dir_path = ""; if (path == null || path.equals("")) { current_path = root_path; current_url = root_url; current_dir_path = ""; moveup_dir_path = ""; } else { current_path = root_path + path; current_url = root_url + path; current_dir_path = path; // 去掉当前目录之后即为上级目录路径 moveup_dir_path = current_dir_path.substring(0, getUpIndex(current_dir_path)); } // 排序形式,name or size or type String order = request.getParameter("order"); order = (order == null) ? "name" : order.toLowerCase(); // 目录不存在或不是目录 File file = new File(current_path); if (!file.exists()) { out.println("Directory does not exist."); return; } // 遍历目录取得文件信息 List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); File dir = new File(current_path); File files[] = dir.listFiles(); for (int i = 0; i < files.length; i++) { Map<String, Object> file_list = new HashMap<String, Object>(); File f_file = files[i]; String filename = f_file.getName(); // 是否是目录 boolean is_dir = false; if (f_file.getPath().equals(root_path) || f_file.isDirectory()) { is_dir = true; } long filesize = 0; // 是否是图片 boolean is_photo = false, // 如果是目录,目录下是否有图片 has_file = true; String filetype = ""; String[] file_ext = filename.trim().split("\\."); if (file_ext.length > 1) { filesize = f_file.length(); is_photo = getExtType(file_ext[1]); has_file = false; filetype = file_ext[1]; } file_list.put("is_dir", is_dir); //是否文件夹 file_list.put("has_file", has_file); //文件夹是否包含文件 file_list.put("filesize", filesize); //文件大小 file_list.put("is_photo", is_photo); //是否图片 file_list.put("filetype", filetype); //文件类别,用扩展名判断 file_list.put("filename", filename); //文件名,包含扩展名 file_list.put("datetime", f_file.lastModified()); //文件最后一次访问时间 list.add(file_list); } // 利用比较器进行排序 Collections.sort(list,getComparator(order)); // 对排序后的List进行构建json字符串 StringBuffer file_list_str = new StringBuffer(); file_list_str.append("["); for (int i=0; i < list.size(); i++){ Map<String, Object> map = (Map<String, Object>) list.get(i); System.out.println(list.size()+"//"+i+"=="+map); file_list_str.append("{"); file_list_str.append("\"is_dir\":").append(Boolean.parseBoolean(map.get("is_dir").toString())).append(","); file_list_str.append("\"has_file\":").append(Boolean.parseBoolean(map.get("has_file").toString())).append(","); file_list_str.append("\"filesize\":\"").append(Long.parseLong(map.get("filesize").toString())).append("\","); file_list_str.append("\"is_photo\":").append(Boolean.parseBoolean(map.get("is_photo").toString())).append(","); file_list_str.append("\"filetype\":\"").append(map.get("filetype").toString()).append("\","); file_list_str.append("\"filename\":\"").append(map.get("filename").toString()).append("\","); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); file_list_str.append("\"datetime\":\"").append(dateFormat.format(new Date(Long.parseLong(map.get("datetime").toString())))).append("\"}"); if (i < files.length - 1) { file_list_str.append(","); } } file_list_str.append("]"); StringBuffer json_str = new StringBuffer(); //相对于根目录的上一级目录 json_str.append("{\"moveup_dir_path\":\"" + moveup_dir_path) .append("\","); //相对于根目录的当前目录 json_str.append("\"current_dir_path\":\"" + current_dir_path) .append("\","); //当前目录的URL json_str.append("\"current_url\":\"" + current_url).append("\","); //文件数 json_str.append("\"total_count\":\"" + list.size()).append("\","); //文件列表数组 json_str.append("\"file_list\":").append(file_list_str).append("}"); //输出JSON字符串 response.setHeader("Content-type", "application/json; charset=UTF-8"); System.out.println(json_str); out.println(json_str.toString()); %> <%!// 判断文件类型 public boolean getExtType(String file_suffix) { // 图片扩展名 String[] ext_arr = new String[] { "gif", "jpg", "jpeg", "png", "bmp" }; boolean ext_type = false; for (int i = 0; i < ext_arr.length; i++) { if (file_suffix != null && file_suffix.equals(ext_arr[i])) { ext_type = true; break; } } return ext_type; } // 排序 public java.util.Comparator getComparator(final String order) { return new java.util.Comparator() { // Override the method compare public int compare(Object a1, Object b1) { Map<String, Object> a = (Map<String, Object>) a1; Map<String, Object> b = (Map<String, Object>) b1; boolean a_dir = Boolean.parseBoolean(a.get("is_dir").toString()); boolean b_dir = Boolean.parseBoolean(b.get("is_dir").toString()); if (a_dir && !b_dir) { return -1; } else if (!a_dir && b_dir) { return 1; } else { if (order.equals("size")) { long a_size = Long.parseLong(a.get("filesize").toString()); long b_size = Long.parseLong(b.get("filesize").toString()); if (a_size > b_size) { return 1; } else if (a_size < b_size) { return -1; } else { return 0; } } else if (order.equals("type")) { return a.get("filetype").toString().compareTo( b.get("filetype").toString()); } else { return a.get("filename").toString().compareTo( b.get("filename").toString()); } } } }; } // 获取上级目录名称位置 public int getUpIndex(String current_dir_path) { int dex = current_dir_path.length()-1; int j=0; for (int i = dex; i >= 0; i--) { if (current_dir_path.charAt(i)=='/') j++; if (j == 2){ dex = i+1; break; } } if (j==1){ dex = 0; } return dex; }%> |
作者: Roddy, 发布日期: 2010-02-22 13:19:11 |
非常感谢你的共享
|
回复 |
作者: flyByself, 发布日期: 2010-05-24 17:18:36 |
alert("hello world");(*^__^*) 嘻嘻…… 请指教一下 我用3.4在从服务器端 回传给KE 图片信息的 格式要求是什么..asp(vbscript)怎么实现 |
回复 |
作者: ruby, 发布日期: 2011-07-01 08:53:31 |
哎,很久不来,连账号都忘了,robby如果看到这个回复,请帮我查查 零度可乐 的账号名是什么?在这里我特此感谢,也建议作者在网站添加个找回账号或者密码的功能。
|
回复 |
作者: Roddy, 发布日期: 2011-07-01 10:18:53 |
回复ruby:帐户名是cool007
|
回复 |