杰瑞科技汇

Java KindEditor图片上传如何配置实现?

KindEditor 是一个比较老但依然在许多项目中使用的富文本编辑器,它的图片上传功能依赖于服务器端的处理,我们将分步完成整个流程:

Java KindEditor图片上传如何配置实现?-图1
(图片来源网络,侵删)
  1. 准备工作:下载 KindEditor 并创建 Java Web 项目。
  2. 前端集成:在 JSP 页面中引入 KindEditor 并初始化。
  3. 后端实现:创建一个 Servlet 来接收和处理文件上传请求。
  4. 配置与测试:配置 Servlet 并测试上传功能。

第 1 步:准备工作

1 下载 KindEditor

访问 KindEditor 官网或 GitHub 下载最新版本,我们这里以 1.11 版本为例。 下载地址:https://github.com/kindsoft/kindeditor/releases

下载后,解压你会看到类似下面的目录结构:

kindeditor-4.1.11/
├── asp/         // ASP 示例
├── asp.net/     // ASP.NET 示例
├── php/         // PHP 示例
├── jsp/         // JSP 示例 (我们主要看这个)
├── examples/    // 演示页面
├── kindeditor-all.js // 核心 JS 文件
├── themes/      // 主题样式
├── lang/        // 语言包
└── ...

2 创建 Java Web 项目

在你的 IDE(如 Eclipse, IntelliJ IDEA)中创建一个 Dynamic Web Project。

3 添加 KindEditor 文件到项目

kindeditor-4.1.11 目录下的以下内容复制到你的 Web 项目的 WebContent 目录下:

Java KindEditor图片上传如何配置实现?-图2
(图片来源网络,侵删)
  • kindeditor-all.js
  • themes/
  • lang/
  • plugins/ (包含图片上传等插件所需的文件)

你的项目结构可能看起来像这样:

KindEditorDemo/
├── src/
│   └── com/
│       └── example/
│           └── upload/
│               └── ImageUploadServlet.java
└── WebContent/
    ├── index.jsp
    ├── kindeditor-all.js
    ├── lang/
    │   └── zh-CN.js
    ├── plugins/
    │   └── ...
    └── themes/
        └── default/
            └── default.css

4 添加上传所需的库

KindEditor 的 JSP 示例依赖两个 Apache Commons 库来处理文件上传,你需要将它们添加到项目的 WEB-INF/lib 目录下。

你可以从 Maven 中央仓库下载:

如果你使用 Maven,在 pom.xml 中添加依赖:

Java KindEditor图片上传如何配置实现?-图3
(图片来源网络,侵删)
<dependencies>
    <!-- KindEditor 本身不需要,但它的JSP示例需要 -->
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.4</version>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.11.0</version>
    </dependency>
    <!-- Servlet API 依赖 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

第 2 步:前端集成 (JSP)

WebContent 目录下创建 index.jsp 文件,这个文件将包含一个 <textarea> 和用于初始化 KindEditor 的 JavaScript 代码。

WebContent/index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">KindEditor Java 上传示例</title>
<script type="text/javascript" src="kindeditor-all.js"></script>
<script type="text/javascript" charset="utf-8" src="lang/zh-CN.js"></script>
<style>
    .ke-container {
        width: 800px;
    }
</style>
</head>
<body>
    <h1>KindEditor 图片上传演示</h1>
    <form>
        <textarea id="editor_id" name="content" style="width:800px;height:400px;">
            &lt;p&gt;请在此输入内容,然后点击编辑器工具栏上的图片按钮上传图片。&lt;/p&gt;
        </textarea>
    </form>
    <script type="text/javascript">
        KindEditor.ready(function(K) {
            window.editor = K.create('#editor_id', {
                // 指定上传图片的Servlet路径
                // uploadJson: '/your-project-path/upload.do' // 这是官方示例的写法,但我们用Servlet
                // 更推荐使用 fileManagerJson 来管理文件,但图片上传主要靠 uploadJson
                // 注意:这里的路径必须和你在web.xml中配置的 <url-pattern> 一致
                uploadJson : '/KindEditorDemo/upload/image', 
                // 允许上传的文件类型
                allowImageUpload : true, 
                // 其他配置...
                width : '800px',
                height : '400px',
                items : [
                    'source', '|', 'undo', 'redo', '|', 'preview', 'print', 'template', 'code', 'cut', 'copy', 'paste',
                    'plainpaste', 'wordpaste', '|', 'justifyleft', 'justifycenter', 'justifyright',
                    'justifyfull', 'insertorderedlist', 'insertunorderedlist', 'indent', 'outdent', 'subscript',
                    'superscript', 'clearhtml', 'quickformat', 'selectall', '|', 'fullscreen', '/',
                    'formatblock', 'fontname', 'fontsize', '|', 'forecolor', 'hilitecolor', 'bold',
                    'italic', 'underline', 'strikethrough', 'lineheight', 'removeformat', '|', 'image', 'multiimage',
                    'flash', 'media', 'insertfile', 'table', 'hr', 'emoticons', 'baidumap', 'pagebreak',
                    'anchor', 'wordimage', 'map'
                ]
            });
        });
    </script>
</body>
</html>

关键点说明:

  • uploadJson: '/KindEditorDemo/upload/image':这是最重要的配置,它告诉 KindEditor,当用户点击“上传图片”按钮时,应该向哪个 URL 发送文件。/KindEditorDemo 是你的项目上下文路径,/upload/image 是我们接下来要配置的 Servlet 的访问路径。

第 3 步:后端实现 (Servlet)

这是处理文件上传的核心部分,我们将创建一个 Servlet,它会接收来自 KindEditor 的文件,保存到服务器的指定目录,并返回一个 JSON 响应。

1 创建上传目录

WebContent 目录下创建一个 attached 文件夹,用于存放上传的图片。

WebContent/
└── attached/  // 用于存放上传的图片
    └── image/  // 在 attached 下再建一个 image 文件夹,结构更清晰

2 编写 Servlet 代码

src/com/example/upload/ImageUploadServlet.java

package com.example.upload;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Random;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
@WebServlet("/upload/image") // 确保这里的注解路径和JSP中配置的uploadJson路径一致
public class ImageUploadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    // 上传文件存储目录
    private static final String UPLOAD_DIR = "attached/image/";
    // 上传配置
    private static final int MEMORY_THRESHOLD = 1024 * 1024 * 3;  // 3MB
    private static final int MAX_FILE_SIZE = 1024 * 1024 * 5;      // 5MB
    private static final int MAX_REQUEST_SIZE = 1024 * 1024 * 10; // 10MB
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 检查是否为 multipart/form-data 请求
        if (!ServletFileUpload.isMultipartContent(request)) {
            //
分享:
扫描分享到社交APP
上一篇
下一篇