zoukankan      html  css  js  c++  java
  • kinderEditor + Struts2整合

    环境:

    kinderEditor4.1.5

    Struts2.3.5

    Spring3.0.5

    Hibernate3.6

    代码:

    FileManageAction

    package com.hcsoft.plugin.editor;  
      
    import java.io.File;  
    import java.io.PrintWriter;  
    import java.text.SimpleDateFormat;  
    import java.util.ArrayList;  
    import java.util.Arrays;  
    import java.util.Collections;  
    import java.util.Comparator;  
    import java.util.Hashtable;  
    import java.util.List;  
      
    import javax.servlet.http.HttpServletRequest;  
    import javax.servlet.http.HttpServletResponse;  
      
    import org.json.simple.JSONObject;  
      
    import com.hcsoft.action.BaseAction;  
      
    @SuppressWarnings({"serial", "unchecked", "rawtypes" })  
    public class FileManageAction extends BaseAction {  
      
        public String execute() throws Exception {  
            // 请求  
            HttpServletRequest request = contextPvd.getRequest();  
      
            // 根目录路径,可以指定绝对路径,比如 /var/www/attached/  
            String rootPath = contextPvd.getAppRealPath("/") + "editor/attached/";  
            // 根目录URL,可以指定绝对路径,比如 http://www.yoursite.com/attached/  
            String rootUrl = request.getContextPath() + "/editor/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)) {  
                    log.error("Invalid Directory name.");  
                }  
                rootPath += dirName + "/";  
                rootUrl += dirName + "/";  
                File saveDirFile = new File(rootPath);  
                if (!saveDirFile.exists()) {  
                    saveDirFile.mkdirs();  
                }  
            }  
            // 根据path参数,设置各路径和URL  
            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) {  
                log.error("Access is not allowed.");  
            }  
            // 最后一个字符不是/  
            if (!"".equals(path) && !path.endsWith("/")) {  
                log.error("Parameter is not valid.");  
            }  
            // 目录不存在或不是目录  
            File currentPathFile = new File(currentPath);  
            if (!currentPathFile.isDirectory()) {  
                log.error("Directory does not exist.");  
            }  
      
            // 遍历目录取的文件信息  
            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());  
            }  
              
            //响应  
            HttpServletResponse response = contextPvd.getResponse();  
            response.setContentType("application/json; charset=UTF-8");  
            PrintWriter out = response.getWriter();  
              
            JSONObject obj = new JSONObject();  
            obj.put("moveup_dir_path", moveupDirPath);  
            obj.put("current_dir_path", currentDirPath);  
            obj.put("current_url", currentUrl);  
            obj.put("total_count", fileList.size());  
            obj.put("file_list", fileList);  
            out.println(obj.toJSONString());  
            return null;  
        }  
      
        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"));  
                }  
            }  
        }  
      
        public String path;  
      
        public String getPath() {  
            return path;  
        }  
      
        public void setPath(String path) {  
            this.path = path;  
        }  
    }  

    FileUploadAction

    package com.hcsoft.plugin.editor;  
      
    import java.io.File;  
    import java.io.FileInputStream;  
    import java.io.FileOutputStream;  
    import java.io.InputStream;  
    import java.io.PrintWriter;  
    import java.text.SimpleDateFormat;  
    import java.util.Arrays;  
    import java.util.Date;  
    import java.util.HashMap;  
    import java.util.Random;  
      
    import javax.servlet.http.HttpServletRequest;  
    import javax.servlet.http.HttpServletResponse;  
      
    import org.apache.commons.fileupload.servlet.ServletFileUpload;  
    import org.json.simple.JSONObject;  
      
    import com.hcsoft.action.BaseAction;  
      
    @SuppressWarnings("serial")  
    public class FileUploadAction extends BaseAction{  
          
        public String execute() throws Exception {  
            //响应  
            HttpServletResponse response = contextPvd.getResponse();  
            response.setContentType("text/html; charset=UTF-8");  
            PrintWriter out = response.getWriter();  
               
            //请求  
            HttpServletRequest request = contextPvd.getRequest();  
              
            //文件保存目录路径  
            String savePath = contextPvd.getAppRealPath("/") + "editor/attached/";  
      
            //文件保存目录URL  
            String saveUrl  = request.getContextPath() + "/editor/attached/";  
      
            //定义允许上传的文件扩展名  
            HashMap<String, String> extMap = new HashMap<String, String>();  
            extMap.put("image", "gif,jpg,jpeg,png,bmp");  
            extMap.put("flash", "swf,flv");  
            extMap.put("media", "swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb");  
            extMap.put("file", "doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2");  
      
            //最大文件大小  
            long maxSize = 1000000;  
      
            if(!ServletFileUpload.isMultipartContent(request)){  
                return error(out,"请选择文件。");  
            }  
            //检查目录  
            File uploadDir = new File(savePath);  
            if(!uploadDir.isDirectory()){  
                return error(out,"上传目录不存在。");  
            }  
            //检查目录写权限  
            if(!uploadDir.canWrite()){  
                return error(out,"上传目录没有写权限。");  
            }  
      
            String dirName = dir;  
            if (dirName == null) {  
                dirName = "image";  
            }  
            if(!extMap.containsKey(dirName)){  
                return error(out,"目录名不正确。");  
            }  
            //创建文件夹  
            savePath += dirName + "/";  
            saveUrl += dirName + "/";  
            File saveDirFile = new File(savePath);  
            if (!saveDirFile.exists()) {  
                saveDirFile.mkdirs();  
            }  
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");  
            String ymd = sdf.format(new Date());  
            savePath += ymd + "/";  
            saveUrl += ymd + "/";  
            File dirFile = new File(savePath);  
            if (!dirFile.exists()) {  
                dirFile.mkdirs();  
            }  
              
            if(imgFile != null && !imgFile.toString().equals("")){  
                long fileSize = imgFile.length();  
                if(fileSize > maxSize){  
                    return error(out,"上传文件大小超过限制。");  
                }  
                //检查扩展名  
                String fileExt = imgFileFileName.substring(imgFileFileName.lastIndexOf(".") + 1).toLowerCase();  
                if(!Arrays.<String>asList(extMap.get(dirName).split(",")).contains(fileExt)){  
                    return error(out,"上传文件扩展名是不允许的扩展名。
    只允许" + extMap.get(dirName) + "格式。");  
                }  
      
                SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");  
                String newFileName = df.format(new Date()) + "_" + new Random().nextInt(1000) + "." + fileExt;  
                  
                File uploadedFile = new File(savePath, newFileName);  
                //获取文件输出流  
                FileOutputStream fos = new FileOutputStream(uploadedFile);  
                //获取内存中当前文件输入流  
                InputStream in = new FileInputStream(imgFile);  
                byte[] buffer = new byte[1024];  
                try {  
                    int num = 0;  
                    while ((num = in.read(buffer)) > 0) {  
                        fos.write(buffer, 0, num);  
                    }  
                } catch (Exception e) {  
                    log.error("kindEditor上传文件出错了!");  
                    return error(out,"上传的文件不存在!");  
                } finally {  
                    in.close();  
                    fos.close();  
                }  
                return success(out,saveUrl + newFileName);  
            }else{  
                return error(out,"上传的文件不存在!");  
            }  
        }  
          
        @SuppressWarnings("unchecked")  
        private String error(PrintWriter out,String message){  
            JSONObject obj = new JSONObject();  
            obj.put("error", 1);  
            obj.put("message", message);  
            out.println(obj.toJSONString());  
            return null;  
        }  
          
        @SuppressWarnings("unchecked")  
        private String success(PrintWriter out,String url){  
            JSONObject obj = new JSONObject();  
            obj.put("error", 0);  
            obj.put("url", url);  
            out.println(obj.toJSONString());  
            return null;  
        }  
      
        /** 
         * 上传的文件类型 
         */  
        public String dir;  
          
        public File imgFile;  
        private String imgFileFileName;  
          
        public String getDir() {  
            return dir;  
        }  
      
        public void setDir(String dir) {  
            this.dir = dir;  
        }  
      
        public File getImgFile() {  
            return imgFile;  
        }  
      
        public void setImgFile(File imgFile) {  
            this.imgFile = imgFile;  
        }  
      
        public String getImgFileFileName() {  
            return imgFileFileName;  
        }  
      
        public void setImgFileFileName(String imgFileFileName) {  
            this.imgFileFileName = imgFileFileName;  
        }  
    }  

    xml配置

    <!-- 文件管理 -->  
    <action name="fileManage" class="fileManageAction"/>  
    <!-- 文件上传 -->  
    <action name="fileUpload" class="fileUploadAction" /> 

    JSP文件调用:

    KindEditor.ready(function(K) {  
        editor = K.create('#kindeditor', {  
            uploadJson : '/manage/fileUpload.do',  
            fileManagerJson : '/manage/fileManage.do',  
            allowFileManager : true  
        });  
    <s:textarea id="kindeditor"  theme="simple"  name="entity.description" cssStyle="700px;height:300px"/>  

    本文转自:http://blog.csdn.net/mylovedeye/article/details/9986325

  • 相关阅读:
    【郑轻邀请赛 G】密室逃脱
    【郑轻邀请赛 C】DOBRI
    【郑轻邀请赛 F】 Tmk吃汤饭
    【郑轻邀请赛 I】这里是天堂!
    【郑轻邀请赛 B】base64解密
    【郑轻邀请赛 A】tmk射气球
    【郑轻邀请赛 H】 维克兹的进制转换
    解决adb command not found以及sdk环境配置
    adb shell 命令详解,android, adb logcat
    Unexpected exception 'Cannot run program ... error=2, No such file or directory' ... adb'
  • 原文地址:https://www.cnblogs.com/dreammyle/p/5286001.html
Copyright © 2011-2022 走看看