1. 程式人生 > >kindeditor編輯器新增自定義外掛的方法

kindeditor編輯器新增自定義外掛的方法

KindEditor是一套開源的HTML視覺化編輯器,主要用於讓使用者在網站上獲得所見即所得編輯效果。說實話在使用這個編輯器以前,我也使用過別的編輯器,最後不是因為使用麻煩,就是因為程式太臃腫,而放棄使用,可是KindEditor不同,不僅結構小巧,而且功能強大,最主要的是它採用外掛的開發管理方式,能很容易再它的基礎上新增外掛來實現自己的功能

  小編在使用KindEditor過程中,隨著使用時間的加長,發現KindEditor一個最大的缺陷,那就是不支援檔案的上傳,所以到網上搜了很多相關的資料,發現可以自己加外掛到KindEditor中,現整理方法如下:

一.開啟kindeditor.js檔案

  1.找到KE.lang,如下圖所示:

kindeditor新增外掛
在裡面加入以下語句:

accessory : '插入附件',

invalidAccessory : "請輸入有效的URL地址。只允許rar,zip格式。",

kindeditor新增外掛

kindeditor新增外掛

  2.在KE.setting中加入將該功能加入到kindeditor中,加入後的截圖如下:

kindeditor新增外掛


二、經過第一步後,準備工作已經作完了,下面就是編寫有關上傳附件的核心程式碼,將以下的程式碼加入到kindeditor.js檔案中,加入到該檔案的最後    })(KindEditor);之前 及上一個“;”之後即可

KE<span class="sh_symbol">.</span>plugin<span class="sh_symbol">[</span><span class="sh_string">'accessory'</span><span class="sh_symbol">]</span> <span class="sh_symbol">=</span> <span class="sh_cbracket">{</span>
     click <span class="sh_symbol">:</span> <span class="sh_keyword">function</span> <span class="sh_symbol">(</span>id<span class="sh_symbol">)</span> <span class="sh_cbracket">{</span>
         KE<span class="sh_symbol">.</span>util<span class="sh_symbol">.</span><span class="sh_function">selection</span><span class="sh_symbol">(</span>id<span class="sh_symbol">);</span>
         <span class="sh_keyword">this</span><span class="sh_symbol">.</span>dialog <span class="sh_symbol">=</span> <span class="sh_keyword">new</span> KE<span class="sh_symbol">.</span><span class="sh_function">dialog</span><span class="sh_symbol">(</span><span class="sh_cbracket">{</span>
             id <span class="sh_symbol">:</span> id<span class="sh_symbol">,</span>
             cmd <span class="sh_symbol">:</span> <span class="sh_string">'accessory'</span><span class="sh_symbol">,</span>
             file <span class="sh_symbol">:</span> <span class="sh_string">'accessory.html'</span><span class="sh_symbol">,</span>
             width <span class="sh_symbol">:</span> <span class="sh_number">310</span><span class="sh_symbol">,</span>
             height <span class="sh_symbol">:</span> <span class="sh_number">55</span><span class="sh_symbol">,</span>
             loadingMode <span class="sh_symbol">:</span> <span class="sh_keyword">true</span><span class="sh_symbol">,</span>
             title <span class="sh_symbol">:</span> KE<span class="sh_symbol">.</span>lang<span class="sh_symbol">[</span><span class="sh_string">'accessory'</span><span class="sh_symbol">],</span>
             yesButton <span class="sh_symbol">:</span> KE<span class="sh_symbol">.</span>lang<span class="sh_symbol">[</span><span class="sh_string">'yes'</span><span class="sh_symbol">],</span>
             noButton<span class="sh_symbol">:</span> KE<span class="sh_symbol">.</span>lang<span class="sh_symbol">[</span><span class="sh_string">'no'</span><span class="sh_symbol">]</span>
         <span class="sh_cbracket">}</span><span class="sh_symbol">);</span>
         <span class="sh_keyword">this</span><span class="sh_symbol">.</span>dialog<span class="sh_symbol">.</span><span class="sh_function">show</span><span class="sh_symbol">();</span>
     <span class="sh_cbracket">}</span><span class="sh_symbol">,</span>
     check<span class="sh_symbol">:</span> <span class="sh_keyword">function</span> <span class="sh_symbol">(</span>id<span class="sh_symbol">)</span> <span class="sh_cbracket">{</span>
         <span class="sh_keyword">var</span> dialogDoc <span class="sh_symbol">=</span> KE<span class="sh_symbol">.</span>util<span class="sh_symbol">.</span><span class="sh_function">getIframeDoc</span><span class="sh_symbol">(</span><span class="sh_keyword">this</span><span class="sh_symbol">.</span>dialog<span class="sh_symbol">.</span>iframe<span class="sh_symbol">);</span>
         <span class="sh_keyword">var</span> url <span class="sh_symbol">=</span> KE<span class="sh_symbol">.</span>$<span class="sh_symbol">(</span><span class="sh_string">'accessoryFile'</span><span class="sh_symbol">,</span> dialogDoc<span class="sh_symbol">).</span>value<span class="sh_symbol">;</span>
         <span class="sh_keyword">if</span> <span class="sh_symbol">(</span>url<span class="sh_symbol">.</span><span class="sh_function">match</span><span class="sh_symbol">(</span><span class="sh_regexp">/\.(rar|zip)$/i</span><span class="sh_symbol">)</span> <span class="sh_symbol">==</span> <span class="sh_keyword">null</span><span class="sh_symbol">)</span> <span class="sh_cbracket">{</span>
             <span class="sh_function">alert</span><span class="sh_symbol">(</span>KE<span class="sh_symbol">.</span>lang<span class="sh_symbol">[</span><span class="sh_string">'invalidAccessory'</span><span class="sh_symbol">]);</span>
             window<span class="sh_symbol">.</span><span class="sh_function">focus</span><span class="sh_symbol">();</span>
             KE<span class="sh_symbol">.</span>g<span class="sh_symbol">[</span>id<span class="sh_symbol">].</span>yesButton<span class="sh_symbol">.</span><span class="sh_function">focus</span><span class="sh_symbol">();</span>
             <span class="sh_keyword">return</span> <span class="sh_keyword">false</span><span class="sh_symbol">;</span>
         <span class="sh_cbracket">}</span>
         <span class="sh_keyword">return</span> <span class="sh_keyword">true</span><span class="sh_symbol">;</span>
     <span class="sh_cbracket">}</span><span class="sh_symbol">,</span>
     exec <span class="sh_symbol">:</span> <span class="sh_keyword">function</span> <span class="sh_symbol">(</span>id<span class="sh_symbol">)</span> <span class="sh_cbracket">{</span>
         <span class="sh_keyword">var</span> self <span class="sh_symbol">=</span> <span class="sh_keyword">this</span><span class="sh_symbol">;</span>
         <span class="sh_keyword">var</span> dialogDoc <span class="sh_symbol">=</span> KE<span class="sh_symbol">.</span>util<span class="sh_symbol">.</span><span class="sh_function">getIframeDoc</span><span class="sh_symbol">(</span><span class="sh_keyword">this</span><span class="sh_symbol">.</span>dialog<span class="sh_symbol">.</span>iframe<span class="sh_symbol">);</span>
         <span class="sh_keyword">if</span> <span class="sh_symbol">(!</span><span class="sh_keyword">this</span><span class="sh_symbol">.</span><span class="sh_function">check</span><span class="sh_symbol">(</span>id<span class="sh_symbol">))</span> <span class="sh_keyword">return</span> <span class="sh_keyword">false</span><span class="sh_symbol">;</span>
         KE<span class="sh_symbol">.</span>$<span class="sh_symbol">(</span><span class="sh_string">'editorId'</span><span class="sh_symbol">,</span> dialogDoc<span class="sh_symbol">).</span>value <span class="sh_symbol">=</span> id<span class="sh_symbol">;</span>
   <span class="sh_keyword">var</span> uploadIframe <span class="sh_symbol">=</span> KE<span class="sh_symbol">.</span>$<span class="sh_symbol">(</span><span class="sh_string">'uploadIframe'</span><span class="sh_symbol">,</span> dialogDoc<span class="sh_symbol">);</span>
   KE<span class="sh_symbol">.</span>util<span class="sh_symbol">.</span><span class="sh_function">showLoadingPage</span><span class="sh_symbol">(</span>id<span class="sh_symbol">);</span>
 
         <span class="sh_keyword">var</span> onloadFunc <span class="sh_symbol">=</span> <span class="sh_keyword">function</span><span class="sh_symbol">()</span> <span class="sh_cbracket">{</span>
             KE<span class="sh_symbol">.</span>event<span class="sh_symbol">.</span><span class="sh_function">remove</span><span class="sh_symbol">(</span>uploadIframe<span class="sh_symbol">,</span> <span class="sh_string">'load'</span><span class="sh_symbol">,</span> onloadFunc<span class="sh_symbol">);</span>
             KE<span class="sh_symbol">.</span>util<span class="sh_symbol">.</span><span class="sh_function">hideLoadingPage</span><span class="sh_symbol">(</span>id<span class="sh_symbol">);</span>
             <span class="sh_keyword">var</span> uploadDoc <span class="sh_symbol">=</span> KE<span class="sh_symbol">.</span>util<span class="sh_symbol">.</span><span class="sh_function">getIframeDoc</span><span class="sh_symbol">(</span>uploadIframe<span class="sh_symbol">);</span>
             <span class="sh_keyword">var</span> data <span class="sh_symbol">=</span> <span class="sh_string">''</span><span class="sh_symbol">;</span>
             <span class="sh_keyword">try</span> <span class="sh_cbracket">{</span>
                 data <span class="sh_symbol">=</span> KE<span class="sh_symbol">.</span>util<span class="sh_symbol">.</span><span class="sh_function">parseJson</span><span class="sh_symbol">(</span>uploadDoc<span class="sh_symbol">.</span>body<span class="sh_symbol">.</span>innerHTML<span class="sh_symbol">);</span>
             <span class="sh_cbracket">}</span> <span class="sh_keyword">catch</span><span class="sh_symbol">(</span>e<span class="sh_symbol">)</span> <span class="sh_cbracket">{</span> <span class="sh_function">alert</span><span class="sh_symbol">(</span>KE<span class="sh_symbol">.</span>lang<span class="sh_symbol">.</span>invalidJson<span class="sh_symbol">);</span> <span class="sh_cbracket">}</span>
             <span class="sh_keyword">if</span> <span class="sh_symbol">(</span><span class="sh_keyword">typeof</span> data <span class="sh_symbol">===</span> <span class="sh_string">'object'</span> <span class="sh_symbol">&&</span> <span class="sh_string">'error'</span> <span class="sh_keyword">in</span> data<span class="sh_symbol">)</span> <span class="sh_cbracket">{</span>
                 <span class="sh_keyword">if</span> <span class="sh_symbol">(</span>data<span class="sh_symbol">.</span>error <span class="sh_symbol">===</span> <span class="sh_number">0</span><span class="sh_symbol">)</span> <span class="sh_cbracket">{</span>
                     self<span class="sh_symbol">.</span><span class="sh_function">insert</span><span class="sh_symbol">(</span>id<span class="sh_symbol">,</span> data<span class="sh_symbol">.</span>url<span class="sh_symbol">,</span>data<span class="sh_symbol">.</span>filename<span class="sh_symbol">);</span>
                 <span class="sh_cbracket">}</span> <span class="sh_keyword">else</span> <span class="sh_cbracket">{</span>
                     <span class="sh_function">alert</span><span class="sh_symbol">(</span>data<span class="sh_symbol">.</span>message<span class="sh_symbol">);</span>
                     <span class="sh_keyword">return</span> <span class="sh_keyword">false</span><span class="sh_symbol">;</span>
                 <span class="sh_cbracket">}</span>
             <span class="sh_cbracket">}</span>
         <span class="sh_cbracket">}</span><span class="sh_symbol">;</span>
 
         KE<span class="sh_symbol">.</span>event<span class="sh_symbol">.</span><span class="sh_function">add</span><span class="sh_symbol">(</span>uploadIframe<span class="sh_symbol">,</span> <span class="sh_string">'load'</span><span class="sh_symbol">,</span> onloadFunc<span class="sh_symbol">);</span>
         dialogDoc<span class="sh_symbol">.</span>uploadForm<span class="sh_symbol">.</span><span class="sh_function">submit</span><span class="sh_symbol">();</span>
 
         <span class="sh_keyword">return</span><span class="sh_symbol">;</span>
     <span class="sh_cbracket">}</span><span class="sh_symbol">,</span>
     insert <span class="sh_symbol">:</span> <span class="sh_keyword">function</span> <span class="sh_symbol">(</span>id<span class="sh_symbol">,</span> url<span class="sh_symbol">,</span> filename<span class="sh_symbol">)</span> <span class="sh_cbracket">{</span>
         KE<span class="sh_symbol">.</span>util<span class="sh_symbol">.</span><span class="sh_function">insertHtml</span><span class="sh_symbol">(</span>id<span class="sh_symbol">,</span> <span class="sh_string">'<a href="'</span> <span class="sh_symbol">+</span> url <span class="sh_symbol">+</span> <span class="sh_string">'" >'</span><span class="sh_symbol">+</span>filename<span class="sh_symbol">+</span><span class="sh_string">'</a>'</span><span class="sh_symbol">);</span>
         <span class="sh_keyword">this</span><span class="sh_symbol">.</span>dialog<span class="sh_symbol">.</span><span class="sh_function">hide</span><span class="sh_symbol">();</span>
         KE<span class="sh_symbol">.</span>util<span class="sh_symbol">.</span><span class="sh_function">focus</span><span class="sh_symbol">(</span>id<span class="sh_symbol">);</span>
     <span class="sh_cbracket">}</span>
 <span class="sh_cbracket">}</span><span class="sh_symbol">;</span>

注意最後的分號

三、在plugins資料夾中增加上傳附件的檔案,檔名為accessory.html,這個名字可以在以上的程式碼中修改(修改以上程式碼中的紅色部分,即可)

<!doctype html>
<span class="sh_keyword"><html></span>
    <span class="sh_keyword"><head></span>
        <span class="sh_keyword"><meta</span> <span class="sh_type">http-equiv</span><span class="sh_symbol">=</span><span class="sh_string">"content-type"</span> <span class="sh_type">content</span><span class="sh_symbol">=</span><span class="sh_string">"text/html; charset=utf-8"</span> <span class="sh_keyword">/></span>
        <span class="sh_keyword"><title></span>Accessory<span class="sh_keyword"></title></span>
        <span class="sh_keyword"><style</span> <span class="sh_type">type</span><span class="sh_symbol">=</span><span class="sh_string">"text/css"</span><span class="sh_keyword">></span>
            body { font-size: 12px; margin: 0px; background: #F0F0EE; overflow: hidden; }
        <span class="sh_keyword"></style></span>
        <span class="sh_keyword"><script</span> <span class="sh_type">type</span><span class="sh_symbol">=</span><span class="sh_string">"text/javascript"</span><span class="sh_keyword">></span>
            var KE = parent.KindEditor;
            location.href.match(/\?id=([\w-]+)/i);
            var id = RegExp.$1;
            KE.event.ready(function () { KE.util.hideLoadingPage(id); }, window, document);
        <span class="sh_keyword"></script></span>
    <span class="sh_keyword"></head></span>
    <span class="sh_keyword"><body></span>
        <span class="sh_keyword"><iframe</span> <span class="sh_type">name</span><span class="sh_symbol">=</span><span class="sh_string">"uploadIframe"</span> <span class="sh_type">id</span><span class="sh_symbol">=</span><span class="sh_string">"uploadIframe"</span> <span class="sh_type">style</span><span class="sh_symbol">=</span><span class="sh_string">"display:none;"</span><span class="sh_keyword">></iframe></span>
        <span class="sh_keyword"><form</span> <span class="sh_type">name</span><span class="sh_symbol">=</span><span class="sh_string">"uploadForm"</span> <span class="sh_type">method</span><span class="sh_symbol">=</span><span class="sh_string">"post"</span> <span class="sh_type">enctype</span><span class="sh_symbol">=</span><span class="sh_string">"multipart/form-data"</span> <span class="sh_type">action</span><span class="sh_symbol">=</span><span class="sh_string">"upload.jsp"</span><span class="sh_type">target</span><span class="sh_symbol">=</span><span class="sh_string">"uploadIframe"</span><span class="sh_keyword">></span>
            <span class="sh_keyword"><input</span> <span class="sh_type">type</span><span class="sh_symbol">=</span><span class="sh_string">"hidden"</span> <span class="sh_type">id</span><span class="sh_symbol">=</span><span class="sh_string">"editorId"</span> <span class="sh_type">name</span><span class="sh_symbol">=</span><span class="sh_string">"id"</span> <span class="sh_type">value</span><span class="sh_symbol">=</span><span class="sh_string">""</span> <span class="sh_keyword">/></span>
                <span class="sh_keyword"><table</span> <span class="sh_type">border</span><span class="sh_symbol">=</span><span class="sh_string">"0"</span> <span class="sh_type">cellpadding</span><span class="sh_symbol">=</span><span class="sh_string">"0"</span> <span class="sh_type">cellspacing</span><span class="sh_symbol">=</span><span class="sh_string">"0"</span> <span class="sh_type">align</span><span class="sh_symbol">=</span><span class="sh_string">"center"</span><span class="sh_keyword">></span>
                  <span class="sh_keyword"><tr><td><input</span> <span class="sh_type">type</span><span class="sh_symbol">=</span><span class="sh_string">"file"</span> <span class="sh_type">id</span><span class="sh_symbol">=</span><span class="sh_string">"accessoryFile"</span> <span class="sh_type">name</span><span class="sh_symbol">=</span><span class="sh_string">"accessoryFile"</span> <span class="sh_type">style</span><span class="sh_symbol">=</span><span class="sh_string">"width:220px;"</span> <span class="sh_keyword">/></td></tr></span>
                <span class="sh_keyword"></table></span>
        <span class="sh_keyword"></form></span>
    <span class="sh_keyword"></body></span>
<span class="sh_keyword"></html></span>

四、編寫附件上傳的處理頁面,這裡使用jsp進行編寫,以上的紅色部分,即是要提交到的處理頁面,這裡upload.jsp和accessory.html在一個資料夾下,大家也可以放到別的資料夾下,然後改一下上面程式碼的action值就可以了,upload.jsp內容如下:

<span class="sh_symbol"><%</span>@ <span class="sh_usertype">page</span><span class="sh_normal"> </span>language<span class="sh_symbol">=</span><span class="sh_string">"java"</span> contentType<span class="sh_symbol">=</span><span class="sh_string">"text/html; charset=UTF-8"</span> pageEncoding<span class="sh_symbol">=</span><span class="sh_string">"UTF-8"</span><span class="sh_symbol">%></span>
<span class="sh_symbol"><%</span>@ <span class="sh_usertype">page</span><span class="sh_normal"> </span><span class="sh_preproc">import</span><span class="sh_symbol">=</span><span class="sh_string">"java.util.*,java.io.*"</span> <span class="sh_symbol">%></span>
<span class="sh_symbol"><%</span>@ <span class="sh_usertype">page</span><span class="sh_normal"> </span><span class="sh_preproc">import</span><span class="sh_symbol">=</span><span class="sh_string">"java.text.SimpleDateFormat"</span> <span class="sh_symbol">%></span>
<span class="sh_symbol"><%</span>@ <span class="sh_usertype">page</span><span class="sh_normal"> </span><span class="sh_preproc">import</span><span class="sh_symbol">=</span><span class="sh_string">"org.apache.commons.fileupload.*"</span> <span class="sh_symbol">%></span>
<span class="sh_symbol"><%</span>@ <span class="sh_usertype">page</span><span class="sh_normal"> </span><span class="sh_preproc">import</span><span class="sh_symbol">=</span><span class="sh_string">"org.apache.commons.fileupload.disk.*"</span> <span class="sh_symbol">%></span>
<span class="sh_symbol"><%</span>@ <span class="sh_usertype">page</span><span class="sh_normal"> </span><span class="sh_preproc">import</span><span class="sh_symbol">=</span><span class="sh_string">"org.apache.commons.fileupload.servlet.*"</span> <span class="sh_symbol">%></span>
<span class="sh_symbol"><%</span>@ <span class="sh_usertype">page</span><span class="sh_normal"> </span><span class="sh_preproc">import</span><span class="sh_symbol">=</span><span class="sh_string">"org.json.simple.*"</span> <span class="sh_symbol">%></span>
<span class="sh_symbol"><%</span>

<span class="sh_comment">//檔案儲存目錄路徑</span>
<span class="sh_usertype">String</span><span class="sh_normal"> </span>savePath <span class="sh_symbol">=</span> pageContext<span class="sh_symbol">.</span><span class="sh_function">getServletContext</span><span class="sh_symbol">().</span><span class="sh_function">getRealPath</span><span class="sh_symbol">(</span><span class="sh_string">"/"</span><span class="sh_symbol">)</span> <span class="sh_symbol">+</span> <span class="sh_string">"attached/"</span><span class="sh_symbol">;</span>
<span class="sh_comment">//檔案儲存目錄URL</span>
<span class="sh_usertype">String</span><span class="sh_normal"> </span>saveUrl  <span class="sh_symbol">=</span> request<span class="sh_symbol">.</span><span class="sh_function">getContextPath</span><span class="sh_symbol">()</span> <span class="sh_symbol">+</span> <span class="sh_string">"/attached/"</span><span class="sh_symbol">;</span>
<span class="sh_comment">//定義允許上傳的副檔名</span>
String<span class="sh_symbol">[]</span> fileTypes <span class="sh_symbol">=</span> <span class="sh_keyword">new</span> String<span class="sh_symbol">[]</span><span class="sh_cbracket">{</span><span class="sh_string">"rar"</span><span class="sh_symbol">,</span> <span class="sh_string">"zip"</span><span class="sh_cbracket">}</span><span class="sh_symbol">;</span>
<span class="sh_comment">//最大檔案大小</span>
<span class="sh_type">long</span> maxSize <span class="sh_symbol">=</span> <span class="sh_number">1000000</span><span class="sh_symbol">;</span>

response<span class="sh_symbol">.</span><span class="sh_function">setContentType</span><span class="sh_symbol">(</span><span class="sh_string">"text/html; charset=UTF-8"</span><span class="sh_symbol">);</span>

<span class="sh_keyword">if</span><span class="sh_symbol">(!</span>ServletFileUpload<span class="sh_symbol">.</span><span class="sh_function">isMultipartContent</span><span class="sh_symbol">(</span>request<span class="sh_symbol">))</span><span class="sh_cbracket">{</span>
 out<span class="sh_symbol">.</span><span class="sh_function">println</span><span class="sh_symbol">(</span><span class="sh_function">getError</span><span class="sh_symbol">(</span><span class="sh_string">"請選擇檔案。"</span><span class="sh_symbol">));</span>
 <span class="sh_keyword">return</span><span class="sh_symbol">;</span>
<span class="sh_cbracket">}</span>
<span class="sh_comment">//檢查目錄</span>
<span class="sh_usertype">File</span><span class="sh_normal"> </span>uploadDir <span class="sh_symbol">=</span> <span class="sh_keyword">new</span> <span class="sh_function">File</span><span class="sh_symbol">(</span>savePath<span class="sh_symbol">);</span>
<span class="sh_keyword">if</span><span class="sh_symbol">(!</span>uploadDir<span class="sh_symbol">.</span><span class="sh_function">isDirectory</span><span class="sh_symbol">())</span><span class="sh_cbracket">{</span>
 out<span class="sh_symbol">.</span><span class="sh_function">println</span><span class="sh_symbol">(</span><span class="sh_function">getError</span><span class="sh_symbol">(</span><span class="sh_string">"上傳目錄不存在。"</span><span class="sh_symbol">));</span>
 <span class="sh_keyword">return</span><span class="sh_symbol">;</span>
<span class="sh_cbracket">}</span>
<span class="sh_comment">//檢查目錄寫許可權</span>
<span class="sh_keyword">if</span><span class="sh_symbol">(!</span>uploadDir<span class="sh_symbol">.</span><span class="sh_function">canWrite</span><span class="sh_symbol">())</span><span class="sh_cbracket">{</span>
 out<span class="sh_symbol">.</span><span class="sh_function">println</span><span class="sh_symbol">(</span><span class="sh_function">getError</span><span class="sh_symbol">(</span><span class="sh_string">"上傳目錄沒有寫許可權。"</span><span class="sh_symbol">));</span>
 <span class="sh_keyword">return</span><span class="sh_symbol">;</span>
<span class="sh_cbracket">}</span>

<span class="sh_usertype">FileItemFactory</span><span class="sh_normal"> </span>factory <span class="sh_symbol">=</span> <span class="sh_keyword">new</span> <span class="sh_function">DiskFileItemFactory</span><span class="sh_symbol">();</span>
<span class="sh_usertype">ServletFileUpload</span><span class="sh_normal"> </span>upload <span class="sh_symbol">=</span> <span class="sh_keyword">new</span> <span class="sh_function">ServletFileUpload</span><span class="sh_symbol">(</span>factory<span class="sh_symbol">);</span>
upload<span class="sh_symbol">.</span><span class="sh_function">setHeaderEncoding</span><span class="sh_symbol">(</span><span class="sh_string">"UTF-8"</span><span class="sh_symbol">);</span>
<span class="sh_usertype">List</span><span class="sh_normal"> </span>items <span class="sh_symbol">=</span> upload<span class="sh_symbol">.</span><span class="sh_function">parseRequest</span><span class="sh_symbol">(</span>request<span class="sh_symbol">);</span>
<span class="sh_usertype">Iterator</span><span class="sh_normal"> </span>itr <span class="sh_symbol">=</span> items<span class="sh_symbol">.</span><span class="sh_function">iterator</span><span class="sh_symbol">();</span>
<span class="sh_keyword">while</span> <span class="sh_symbol">(</span>itr<span class="sh_symbol">.</span><span class="sh_function">hasNext</span><span class="sh_symbol">())</span> <span class="sh_cbracket">{</span>
 <span class="sh_usertype">FileItem</span><span class="sh_normal"> </span>item <span class="sh_symbol">=</span> <span class="sh_symbol">(</span>FileItem<span class="sh_symbol">)</span> itr<span class="sh_symbol">.</span><span class="sh_function">next</span><span class="sh_symbol">();</span>
 <span class="sh_usertype">String</span><span class="sh_normal"> </span>fileName <span class="sh_symbol">=</span> item<span class="sh_symbol">.</span><span class="sh_function">getName</span><span class="sh_symbol">();</span>
 <span class="sh_type">long</span> fileSize <span class="sh_symbol">=</span> item<span class="sh_symbol">.</span><span class="sh_function">getSize</span><span class="sh_symbol">();</span>
 <span class="sh_keyword">if</span> <span class="sh_symbol">(!</span>item<span class="sh_symbol">.</span><span class="sh_function">isFormField</span><span class="sh_symbol">())</span> <span class="sh_cbracket">{</span>
  <span class="sh_comment">//檢查檔案大小</span>
  <span class="sh_keyword">if</span><span class="sh_symbol">(</span>item<span class="sh_symbol">.</span><span class="sh_function">getSize</span><span class="sh_symbol">()</span> <span class="sh_symbol">></span> maxSize<span class="sh_symbol">)</span><span class="sh_cbracket">{</span>
   out<span class="sh_symbol">.</span><span class="sh_function">println</span><span class="sh_symbol">(</span><span class="sh_function">getError</span><span class="sh_symbol">(</span><span class="sh_string">"上傳檔案大小超過限制。"</span><span class="sh_symbol">));</span>
   <span class="sh_keyword">return</span><span class="sh_symbol">;</span>
  <span class="sh_cbracket">}</span>
  <span class="sh_comment">//檢查副檔名</span>
  <span class="sh_usertype">String</span><span class="sh_normal"> </span>fileExt <span class="sh_symbol">=</span> fileName<span class="sh_symbol">.</span><span class="sh_function">substring</span><span class="sh_symbol">(</span>fileName<span class="sh_symbol">.</span><span class="sh_function">lastIndexOf</span><span class="sh_symbol">(</span><span class="sh_string">"."</span><span class="sh_symbol">)</span> <span class="sh_symbol">+</span> <span class="sh_number">1</span><span class="sh_symbol">).</span><span class="sh_function">toLowerCase</span><span class="sh_symbol">();</span>
  <span class="sh_keyword">if</span><span class="sh_symbol">(!</span>Arrays<span class="sh_symbol">.<</span>String<span class="sh_symbol">></span><span class="sh_function">asList</span><span class="sh_symbol">(</span>fileTypes<span class="sh_symbol">).</span><span class="sh_function">contains</span><span class="sh_symbol">(</span>fileExt<span class="sh_symbol">))</span><span class="sh_cbracket">{</span>
   out<span class="sh_symbol">.</span><span class="sh_function">println</span><span class="sh_symbol">(</span><span class="sh_function">getError</span><span class="sh_symbol">(</span><span class="sh_string">"上傳副檔名是不允許的副檔名。"</span><span class="sh_symbol">));</span>
   <span class="sh_keyword">return</span><span class="sh_symbol">;</span>
  <span class="sh_cbracket">}</span>
  <span class="sh_usertype">SimpleDateFormat</span><span class="sh_normal"> </span>df <span class="sh_symbol">=</span> <span class="sh_keyword">new</span> <span class="sh_function">SimpleDateFormat</span><span class="sh_symbol">(</span><span class="sh_string">"yyyyMMddHHmmss"</span><span class="sh_symbol">);</span>
  <span class="sh_usertype">String</span><span class="sh_normal"> </span>newFileName <span class="sh_symbol">=</span> df<span class="sh_symbol">.</span><span class="sh_function">format</span><span class="sh_symbol">(</span><span class="sh_keyword">new</span> <span class="sh_function">Date</span><span class="sh_symbol">())</span> <span class="sh_symbol">+</span> <span class="sh_string">"_"</span> <span class="sh_symbol">+</span> <span class="sh_keyword">new</span> <span class="sh_function">Random</span><span class="sh_symbol">().</span><span class="sh_function">nextInt</span><span class="sh_symbol">(</span><span class="sh_number">1000</span><span class="sh_symbol">)</span> <span class="sh_symbol">+</span> <span class="sh_string">"."</span> <span class="sh_symbol">+</span> fileExt<span class="sh_symbol">;</span>
  <span class="sh_keyword">try</span><span class="sh_cbracket">{</span>
   <span class="sh_usertype">File</span><span class="sh_normal"> </span>uploadedFile <span class="sh_symbol">=</span> <span class="sh_keyword">new</span> <span class="sh_function">File</span><span class="sh_symbol">(</span>savePath<span class="sh_symbol">,</span> newFileName<span class="sh_symbol">);</span>
   item<span class="sh_symbol">.</span><span class="sh_function">write</span><span class="sh_symbol">(</span>uploadedFile<span class="sh_symbol">);</span>
  <span class="sh_cbracket">}</span><span class="sh_keyword">catch</span><span class="sh_symbol">(</span><span class="sh_usertype">Exception</span><span class="sh_normal"> </span>e<span class="sh_symbol">)</span><span class="sh_cbracket">{</span>
   out<span class="sh_symbol">.</span><span class="sh_function">println</span><span class="sh_symbol">(</span><span class="sh_function">getError</span><span class="sh_symbol">(</span><span class="sh_string">"上傳檔案失敗。"</span><span class="sh_symbol">));</span>
   <span class="sh_keyword">return</span><span class="sh_symbol">;</span>
  <span class="sh_cbracket">}</span>

  <span class="sh_usertype">JSONObject</span><span class="sh_normal"> </span>obj <span class="sh_symbol">=</span> <span class="sh_keyword">new</span> <span class="sh_function">JSONObject</span><span class="sh_symbol">();</span>
  obj<span class="sh_symbol">.</span><span class="sh_function">put</span><span class="sh_symbol">(</span><span class="sh_string">"error"</span><span class="sh_symbol">,</span> <span class="sh_number">0</span><span class="sh_symbol">);</span>
  obj<span class="sh_symbol">.</span><span class="sh_function">put</span><span class="sh_symbol">(</span><span class="sh_string">"url"</span><span class="sh_symbol">,</span> saveUrl <span class="sh_symbol">+</span> newFileName<span class="sh_symbol">);</span>
  obj<span class="sh_symbol">.</span><span class="sh_function">put</span><span class="sh_symbol">(</span><span class="sh_string">"filename"</span><span class="sh_symbol">,</span>fileName<span class="sh_symbol">);</span>
  out<span class="sh_symbol">.</span><span class="sh_function">println</span><span class="sh_symbol">(</span>obj<span class="sh_symbol">.</span><span class="sh_function">toJSONString</span><span class="sh_symbol">());</span>
 <span class="sh_cbracket">}</span>
<span class="sh_cbracket">}</span>
<span class="sh_symbol">%></span>
<span class="sh_symbol"><%!</span>
<span class="sh_keyword">private</span> <span class="sh_usertype">String</span><span class="sh_normal"> </span><span class="sh_function">getError</span><span class="sh_symbol">(</span><span class="sh_usertype">String</span><span class="sh_normal"> </span>message<span class="sh_symbol">)</span> <span class="sh_cbracket">{</span>
 <span class="sh_usertype">JSONObject</span><span class="sh_normal"> </span>obj <span class="sh_symbol">=</span> <span class="sh_keyword">new</span> <span class="sh_function">JSONObject</span><span class="sh_symbol">();</span>
 obj<span class="sh_symbol">.</span><span class="sh_function">put</span><span class="sh_symbol">(</span><span class="sh_string">"error"</span><span class="sh_symbol">,</span> <span class="sh_number">1</span><span class="sh_symbol">);</span>
 obj<span class="sh_symbol">.</span><span class="sh_function">put</span><span class="sh_symbol">(</span><span class="sh_string">"message"</span><span class="sh_symbol">,</span> message<span class="sh_symbol">);</span>
 <span class="sh_keyword">return</span> obj<span class="sh_symbol">.</span><span class="sh_function">toJSONString</span><span class="sh_symbol">();</span>
<span class="sh_cbracket">}</span>
<span class="sh_symbol">%></span>

五、修改skins目錄裡的default.gif,增加附件圖示,可採用photoshop等圖片處理軟體,在default.gif的最後面加一個附件圖示,大小為16*16px的即可

六、修改skins目錄裡的default.css,加入

<span class="sh_selector">.ke</span><span class="sh_symbol">-</span>icon<span class="sh_symbol">-</span>accessory
<span class="sh_cbracket">{</span>
    <span class="sh_property">background-position:</span> <span class="sh_value">0px</span> <span class="sh_value">-960px</span>;
    <span class="sh_property">width:</span> <span class="sh_value">16px</span>;
    <span class="sh_property">height:</span> <span class="sh_value">16px</span>;
<span class="sh_cbracket">}</span>

七、測試效果如下:

kindeditor新增外掛

八、完成

KindEditor下載

轉載自:http://down.chinaz.com/try/201106/711_1.htm

zhuanzai