1. 程式人生 > >KindEditor結合ssm框架使用

KindEditor結合ssm框架使用

介紹

最近專案中要用的檔案上傳的元件與富文字編輯器的使用。一直用的富文字編輯器是金山的KindEditor和百度的Ueditor。之前沒有負責處理上傳的業務邏輯,只是用的kindEditor的預設uploadjson.jsp.由於業務的變動。需要自己手動處理一下上傳的服務端。廢話不多說,今天先來介紹一下KindEditor的使用。之後會把Ueditor使用補上。

使用kindEditor的好處

srping-mvc給我們提供了檔案上傳的api,如果一個專案中只有一個檔案上傳的模組,參考spring-mvc 官方文件,可以在原始的from 標籤中完成文件上傳。但如果多個模組中都有檔案上傳的需要的話,每次都要負責處理檔案上傳的業務。程式顯得臃腫,並且程式碼得不到重用。使用editor的思路是:使用前端js完成非同步檔案上傳。等到檔案上傳結束後,將檔案的儲存路徑利用json的格式輸出到前端頁面。前端將表單提交即可。

程式演示

點選檔案上傳按鈕,彈出檔案選擇框。

這裡寫圖片描述

點選上傳後,開始上傳檔案。當檔案上傳完成後,會將檔案的儲存路徑顯示到文字框中。效果如下:

這裡寫圖片描述

最後將該表單提交即可。如此便完成了表單提交與檔案上傳業務的程式碼隔離。

環境介紹
首先用kindeditor的官網中下載最新版的kindeditor版本,解壓,匯出到專案中去。在這裡我將kindeditor進行了精簡。如下圖:

這裡寫圖片描述

jsp介面程式碼如下:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!-- 匯入css -->
<link rel="stylesheet"
    href="/upload/kindeditor/themes/default/default.css" />
<!-- 匯入核心js -->
<script src="/upload/kindeditor/kindeditor.js"></script>
<!-- 匯入語言包 -->
<script src="/upload/kindeditor/lang/zh_CN.js"></script>

<script src="/upload/kindeditor/jquery.js"></script>
<script type="text/javascript">
    //初始化kindeditor元件
    KindEditor.ready(function(K) {
        var editor = K.editor({
            allowFileManager : true,
            uploadJson : '/upload/uploadController',//後臺檔案上傳處理的路徑
            filePostName : 'file'//檔案的欄位名,一會看到後臺程式碼時會解釋怎麼使用
        });

        K('#image3').click(//為檔案上傳按鈕繫結事件
                function() {
                    editor.loadPlugin('image', function() {//載入檔案上傳外掛
                        editor.plugin.imageDialog({
                            showRemote : false,
                            imageUrl : K('#url3').val(),//獲取本地檔案路徑:如:c:/doc/ccc.png檔案
                            clickFn : function(url, title, width, height,
                                    border, align) {//當上傳檔案成功時的回撥函式
                                K('#url3').val(url);//將路徑回顯
                                editor.hideDialog();//隱藏檔案上傳kuang
                            }
                        });
                    });
                });
    });
</script>
</head>
<body>
    <p>
        <input type="text" id="url3" value="" /> <input type="button"
            id="image3" value="選擇檔案" />
    </p>
</body>
</html>

檔案上傳後臺程式碼:

@RequestMapping(value = "/uploadController", produces = { "application/json;charset=UTF-8" })
    @ResponseBody
    public Map<String, Object> upload(@RequestParam("file") MultipartFile file) {

        // 獲取檔案原始名稱 :如:DSC_0058.JPG
        String originalFilename = file.getOriginalFilename();
        /**
         * 在這裡可以負責處理檔案上傳的邏輯 如:為檔案重新命名,寫到自定義的路徑或者上傳到ftp伺服器等。 處理完檔案上傳後要通知前臺上傳的結果
         * 成功時json串: { "error" : 0, "url" : "http://www.example.com/path/to/file.ext"}
         * 失敗時json串: { "error" : 1, "message" : "錯誤資訊" }
         * 這裡我用map封裝了一下如下
         */
        Map<String, Object> result = new HashMap<>();
        result.put("error", 0);
        result.put("message", "上傳成功");
        result.put("url", "/upload/kindeditor/editor.gif");
        return result;
    }

至此,檔案單檔案上傳完成。

富文字編輯器的使用

執行效果如下:

這裡寫圖片描述

涉及到檔案上傳的有:

這裡寫圖片描述

從左到右依次為:單檔案上傳,多檔案上傳,flash上傳,視訊上傳,檔案上傳等。 利用此外掛,以及我們剛才的後臺程式碼。可以把所有檔案上傳的業務交給一個controller來空中。做到一次編寫,多次使用。

執行效果如下(顯示多圖片上傳)

檔案選擇:

這裡寫圖片描述

點選上傳:

這裡寫圖片描述

結果:

這裡寫圖片描述

由於後臺我們沒有處理真正的業務上傳邏輯,所以本次範圍的是一個靜態頁面:

    result.put("url", "/upload/kindeditor/editor.gif");

也就說 無論上傳什麼,返回的都是同一張圖片 哈哈。

下面粘上前臺程式碼:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="/upload/kindeditor/themes/default/default.css" />
        <script src="/upload/kindeditor/kindeditor.js"></script>
        <script src="/upload/kindeditor/lang/zh_CN.js"></script>
        <script src="/upload/kindeditor/jquery.js"></script>
        <script>
        KindEditor.ready(function(K) {//初始化editor
                window.editor = K.create('#editor_id',{//建立 editor
                    uploadJson:'/upload/uploadController',//設定檔案上傳coltroller路徑
                    filePostName:'file',//欄位名
                    imageSizeLimit:'10MB',//每個檔案大小的限制
                    imageUploadLimit:40//每次可以上傳多少個檔案
                });
        });
</script>
</head>
<body>
<!--  editor 的顯示區域 -->
<p><textarea id="editor_id" name="content" style="width:700px;height:300px;">
&lt;strong&gt;HTML內容&lt;/strong&gt;
</textarea></p>
</body>
</html>