主题: 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
回复
发表新帖 发表回复