免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
[CKEditor那點(diǎn)事兒]使用java開發(fā)ckeditor的瀏覽服務(wù)器文件功能

接上篇文章,本章節(jié)講述使用java語言的ckeditor服務(wù)器文件瀏覽功能。

// 雖然兩篇文章的代碼都帶有文件類型參數(shù),但是此處不進(jìn)行判斷非法格式,僅以圖片類型為主介紹控件功能的開發(fā)過程。

上篇文章中,在CKEDITOR的圖片選擇頁面,我們增加了一個(gè)瀏覽按鈕

 

 

 

我們希望點(diǎn)擊瀏覽服務(wù)器可以去服務(wù)器直接選擇已經(jīng)通過其他方式上傳的圖片,依舊很痛苦的是,我們沒有那么多的銀子去購買圖片服務(wù)器,所以在應(yīng)用中開辟了特定的區(qū)域來存放圖片,并且采用分文件夾的方式。所以,瀏覽服務(wù)器,就涉及到多級目錄的問題,我們希望如果當(dāng)前的目錄下存在子目錄,那么可以直接進(jìn)入子目錄挑選圖片,并且可以自由的前后操作。

先看看效果:

 

 

 

 

 

 

這樣用戶可以直接在界面上操作圖片,進(jìn)行富文本的編輯。

 

看看代碼:

 

  1. package com.normandy.position.web;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5. import java.io.PrintWriter;  
  6. import java.net.URLDecoder;  
  7. import java.net.URLEncoder;  
  8. import java.util.ArrayList;  
  9. import java.util.Iterator;  
  10. import java.util.List;  
  11.   
  12. import javax.servlet.http.HttpServletRequest;  
  13. import javax.servlet.http.HttpServletResponse;  
  14.   
  15. import org.apache.commons.lang.StringUtils;  
  16. import org.apache.log4j.Logger;  
  17. import org.springframework.stereotype.Controller;  
  18. import org.springframework.ui.ModelMap;  
  19. import org.springframework.web.bind.annotation.RequestMapping;  
  20. import org.springframework.web.bind.annotation.RequestMethod;  
  21.   
  22. import com.normandy.position.common.NorStringUtils;  
  23. /** 
  24.  * 瀏覽服務(wù)器的圖片 
  25.  * @author: quzishen 
  26.  * @class_type: FileBrowerController 
  27.  * @version: v1.0 
  28.  * @create_time:2010-8-24 下午03:54:04 
  29.  * @project_name:NormandyPosition 
  30.  * @description: 
  31.  * <p> 
  32.  *   
  33.  * </p> 
  34.  */  
  35. @Controller  
  36. @RequestMapping("/browerServer.do")  
  37. public class FileBrowerController {  
  38.     protected final Logger logger = Logger  
  39.             .getLogger(FileBrowerController.class);  
  40.     /** ~~~ 上傳文件的保存路徑 */  
  41.     private static final String FILE_UPLOAD_DIR = "upload";  
  42.     /** ~~~ 上傳文件的保存的下一級路徑,標(biāo)示存儲(chǔ)類型 */  
  43.     private static final String FILE_UPLOAD_SUB_IMG_DIR = "img";  
  44.     /** ~~~ 為了能讓CKEDITOR加載到上傳的圖片,此處將位置限制在了freemarker下*/  
  45.     private static final String FOR_FREEMARKER_LOAD_DIR = "freemarker";  
  46.   
  47.     @RequestMapping(method = RequestMethod.GET)  
  48.     public void processBrower(ModelMap modelMap, HttpServletRequest request,  
  49.             HttpServletResponse response) {  
  50.         processBrowerPost(modelMap, request, response);  
  51.         return;  
  52.     }  
  53.   
  54.     @SuppressWarnings("deprecation")  
  55.     @RequestMapping(method = RequestMethod.POST)  
  56.     public void processBrowerPost(ModelMap modelMap,  
  57.             HttpServletRequest request, HttpServletResponse response) {  
  58.   
  59.         String typeStr = request.getParameter("type");  
  60.         String floderName = request.getParameter("fo");  
  61.           
  62.         if (logger.isDebugEnabled()) {  
  63.             logger.debug("瀏覽文件,文件格式:" + typeStr);  
  64.         }  
  65.   
  66.         // 定位到目標(biāo)文件夾 : 上傳目錄  
  67.         String realPath = "";  
  68.         if(StringUtils.isNotBlank(floderName)){  
  69.             floderName = URLDecoder.decode(floderName);  
  70.             // 如果請求中存在文件夾名稱,則定位到文件夾中  
  71.             realPath = request.getSession().getServletContext().getRealPath(floderName);  
  72.             if(logger.isInfoEnabled()){  
  73.                 logger.info("sub floder:"+realPath);  
  74.             }  
  75.         }else if(StringUtils.equalsIgnoreCase(typeStr, "Image")){  
  76.             // 如果請求中不存在文件夾名稱,則使用默認(rèn)的文件夾  
  77.             realPath = request.getSession().getServletContext().getRealPath(FOR_FREEMARKER_LOAD_DIR+ File.separator+FILE_UPLOAD_DIR+ File.separator+FILE_UPLOAD_SUB_IMG_DIR);  
  78.             if(logger.isInfoEnabled()){  
  79.                 logger.info("default floder:"+realPath);  
  80.             }  
  81.         }  
  82.           
  83.         File folder = new File(realPath);  
  84.         if(!folder.exists()){  
  85.             return;  
  86.         }  
  87.           
  88.         // 存儲(chǔ)子目錄 ,路徑需要從/freemarker開始  
  89.         List<String> subFolderSet = new ArrayList<String>();  
  90.         // 存儲(chǔ)文件夾  
  91.         List<String> subFileerSet = new ArrayList<String>();  
  92.           
  93.         File[] subFiles = folder.listFiles();  
  94.         if(null != subFiles && 0 < subFiles.length){  
  95.             for(int i=0;i < subFiles.length; i++){  
  96.                 File _file = subFiles[i];  
  97.                 if(_file.isDirectory()){  
  98.                     subFolderSet.add(getDefaultFolderFromFreemarker(_file));  
  99.                 } else {  
  100.                     subFileerSet.add(NorStringUtils.getFileName(_file.getName()));  
  101.                 }  
  102.             }  
  103.         }  
  104.           
  105.         String callback = request.getParameter("CKEditorFuncNum");  
  106.         PrintWriter out;  
  107.           
  108.         response.setContentType("text/html");  
  109.         response.setCharacterEncoding("GB2312");  
  110.         try {  
  111.             out = response.getWriter();  
  112.             out.println("<mce:script type='text/javascript'><!--  
  113. ");  
  114.               
  115.             // 定義點(diǎn)擊選擇js  
  116.             out.println("function choose(obj){");  
  117.             out.println("window.opener.CKEDITOR.tools.callFunction(" + callback  
  118.                     + ",obj)");  
  119.             out.println("window.close();");  
  120.             out.println("}");  
  121.               
  122.             // 定義文件夾點(diǎn)擊響應(yīng)js  
  123.             out.println("function view(obj){window.location.href='browerServer.do?type=image&CKEditorFuncNum="+callback+"&fo='+obj;}");  
  124.             out.println("  
  125. // --></mce:script>");  
  126.               
  127.             // 這里顯示一個(gè)返回頂級目錄,也就是返回freemarker目錄  
  128.             out.print("<div style='width:100%;float:left;word-break:break-all;' onclick =view('" + URLEncoder.encode("/freemarker/upload") + "')>");  
  129.             out.print("<span>[根目錄]<span/>");  
  130.             out.print("</div>");  
  131.               
  132.             // 如果是子文件夾,顯示上級目錄鏈接  
  133.             if(StringUtils.isNotBlank(floderName) && !checkIsRoot(folder)){  
  134.                 String parent = getDefaultFolderFromFreemarker(folder.getParentFile());  
  135.                 out.print("<div style='width:100%;float:left;word-break:break-all;' onclick =view('" + URLEncoder.encode(parent) + "')>");  
  136.                 out.print("<span>[上級目錄]"+parent+"<span/>");  
  137.                 out.print("</div>");  
  138.                 if(logger.isDebugEnabled()){  
  139.                     logger.debug("發(fā)現(xiàn)上級目錄:"+ parent);  
  140.                 }  
  141.             }  
  142.               
  143.             // 如果是文件夾,則顯示文件夾并且可以再次觸發(fā)下級和上級目錄  
  144.             if(0 < subFolderSet.size()){  
  145.                 Iterator<String> subFolderSetIndex = subFolderSet.iterator();  
  146.                 while(subFolderSetIndex.hasNext()){  
  147.                     String ftemp = subFolderSetIndex.next();  
  148.                     // 這里url傳遞的時(shí)候,文件分隔符會(huì)有問題,需要轉(zhuǎn)義  
  149.                     out.print("<div style='width:100%;float:left;word-break:break-all;' onclick =view('" + URLEncoder.encode(ftemp) + "')>");  
  150.                     out.print("<span>[下級目錄]"+ftemp+"</span>");  
  151.                     out.print("</div>");  
  152.                       
  153.                     if(logger.isDebugEnabled()){  
  154.                         logger.debug("添加子目錄:"+ftemp);  
  155.                     }  
  156.                 }  
  157.             }  
  158.               
  159.             // 如果是文件,則點(diǎn)擊就選擇文件到控件中  
  160.             if(0 < subFileerSet.size()){  
  161.                 Iterator<String> subFileerSetIndex = subFileerSet.iterator();  
  162.                 while(subFileerSetIndex.hasNext()){  
  163.                     String ftemp = subFileerSetIndex.next();  
  164.                     String f = getDefaultFolderFromFreemarker(folder);  
  165.                     String fileUrl = f + File.separator + ftemp;  
  166.                     fileUrl = StringUtils.replace(fileUrl, "http://""/");  
  167.                       
  168.                     out.print("<div style='width:150px;height:150px;float:left;word-break:break-all;padding:5px;background:#666699;margin:5px;'>");  
  169.                     out.print("<a href="javascript:void(0)" mce_href="javascript:void(0)" onclick=choose('"+fileUrl+"')><img style='border:none;width:145px;height:145px;' src=""+fileUrl+"" mce_src=""+fileUrl+"" title='"+fileUrl+"'/></a>");  
  170.                     out.print("</div>");  
  171.                       
  172.                     if(logger.isDebugEnabled()){  
  173.                         logger.debug("添加文件:"+fileUrl);  
  174.                     }  
  175.                 }  
  176.             }  
  177.               
  178.             out.flush();  
  179.             out.close();  
  180.         } catch (IOException e) {  
  181.             e.printStackTrace();  
  182.         }  
  183.     }  
  184.       
  185.     /** 
  186.      * 從freemarker這一級開始獲取文件夾路徑 
  187.      * @return 
  188.      */  
  189.     private static String getDefaultFolderFromFreemarker(File folder){  
  190.         String path = folder.getPath();  
  191.         path = path.substring(path.indexOf(FOR_FREEMARKER_LOAD_DIR));  
  192.         return path;  
  193.     }  
  194.       
  195.     /** 
  196.      * 判斷是否是根目錄 
  197.      * @param floderName 
  198.      * @return 
  199.      */  
  200.     private static boolean checkIsRoot(File folder){  
  201.         String name = NorStringUtils.getFileName(folder.getName());  
  202.         return StringUtils.equalsIgnoreCase(name, FILE_UPLOAD_DIR);  
  203.     }  
  204. }  

 

這里注意,如果你沒有成功,看第一篇最后部分的部署配置介紹,很簡單的事兒

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
freemarker模板在客服域的使用場景及用法介紹
FTP獲取根目錄下的所有子文件
spring boot-aop的使用
Java各種加密方式集錦(AES,DES,RSA,DSA,MD5,SHA)
SpringMVC同時(shí)支持多視圖(JSP,Velocity,Freemarker等)的一種思路實(shí)現(xiàn)
SpringMVC強(qiáng)大的數(shù)據(jù)綁定(1)——第六章 注解式控制器詳解——跟著開濤學(xué)SpringMVC
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服