使用KindEditor实现图片上传、提交文字数据

article/2025/9/24 11:08:54

KindEditor 是一套开源的 HTML 可视化编辑器,主要用于让用户在网站上获得所见即

所得编辑效果,兼容 IEFirefoxChromeSafariOpera 等主流浏览器。

KindEditor 使用 JavaScript 编写,可以无缝的于 Java.NETPHPASP 等程序接合。

KindEditor 非常适合在 CMS、商城、论坛、博客、Wiki、电子邮件等互联网应用上使用,

2006 7 月首次发布 2.0 以来,KindEditor 依靠出色的用户体验和领先的技术不断扩大编

辑器市场占有率,目前在国内已经成为最受欢迎的编辑器之一。

官网:http://kindeditor.net

部分代码:

工具类:

FtpUtilFTPClient 工具类

package com.zxw.commons;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;/*** ftp上传下载工具类*/
public class FtpUtil {/** * Description: 向FTP服务器上传文件 * @param host FTP服务器hostname * @param port FTP服务器端口 * @param username FTP登录账号 * @param password FTP登录密码 * @param basePath FTP服务器基础目录* @param filePath FTP服务器文件存放路径。例如分日期存放:/2018/01/01。文件的路径为basePath+filePath* @param filename 上传到FTP服务器上的文件名 * @param input 输入流 * @return 成功返回true,否则返回false */  
public static boolean uploadFile(String host, int port, String username, String password, String basePath,String filePath, String filename, InputStream input) {boolean result = false;FTPClient ftp = new FTPClient();try {int reply;ftp.connect(host, port);// 连接FTP服务器// 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器ftp.login(username, password);// 登录reply = ftp.getReplyCode();if (!FTPReply.isPositiveCompletion(reply)) {ftp.disconnect();return result;}//切换到上传目录if (!ftp.changeWorkingDirectory(basePath+filePath)) {//如果目录不存在创建目录String[] dirs = filePath.split("/");String tempPath = basePath;for (String dir : dirs) {if (null == dir || "".equals(dir)) continue;tempPath += "/" + dir;if (!ftp.changeWorkingDirectory(tempPath)) {if (!ftp.makeDirectory(tempPath)) {return result;} else {ftp.changeWorkingDirectory(tempPath);}}}}//设置上传文件的类型为二进制类型ftp.setFileType(FTP.BINARY_FILE_TYPE);//上传文件if (!ftp.storeFile(filename, input)) {return result;}input.close();ftp.logout();result = true;} catch (IOException e) {e.printStackTrace();} finally {if (ftp.isConnected()) {try {ftp.disconnect();} catch (IOException ioe) {}}}return result;}/** * Description: 从FTP服务器下载文件 * @param host FTP服务器hostname * @param port FTP服务器端口 * @param username FTP登录账号 * @param password FTP登录密码 * @param remotePath FTP服务器上的相对路径 * @param fileName 要下载的文件名 * @param localPath 下载后保存到本地的路径 * @return */  public static boolean downloadFile(String host, int port, String username, String password, String remotePath,String fileName, String localPath) {boolean result = false;FTPClient ftp = new FTPClient();try {int reply;ftp.connect(host, port);// 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器ftp.login(username, password);// 登录reply = ftp.getReplyCode();if (!FTPReply.isPositiveCompletion(reply)) {ftp.disconnect();return result;}ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录FTPFile[] fs = ftp.listFiles();for (FTPFile ff : fs) {if (ff.getName().equals(fileName)) {File localFile = new File(localPath + "/" + ff.getName());OutputStream is = new FileOutputStream(localFile);ftp.retrieveFile(ff.getName(), is);is.close();}}ftp.logout();result = true;} catch (IOException e) {e.printStackTrace();} finally {if (ftp.isConnected()) {try {ftp.disconnect();} catch (IOException ioe) {}}}return result;}
}

IDUtils:生成一切 ID 的策略的工具类。可以使用他生成图片名称

package com.zxw.commons;import java.util.Random;
import java.util.UUID;/*** 各种id生成策略* @version 1.0*/
public class IDUtils {/*** 图片名生成*/public static String genImageName() {//取当前时间的长整形值包含毫秒long millis = System.currentTimeMillis();//long millis = System.nanoTime();//加上三位随机数Random random = new Random();int end3 = random.nextInt(999);//如果不足三位前面补0String str = millis + String.format("%03d", end3);return str;}}

JsonUtils:对象与 json 格式转换的工具类

package com.zxw.commons;import java.util.List;import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;/*** JSON转换工具类*/
public class JsonUtils {// 定义jackson对象private static final ObjectMapper MAPPER = new ObjectMapper();/*** 将对象转换成json字符串。* <p>Title: pojoToJson</p>* <p>Description: </p>* @param data* @return*/public static String objectToJson(Object data) {try {String string = MAPPER.writeValueAsString(data);return string;} catch (JsonProcessingException e) {e.printStackTrace();}return null;}/*** 将json结果集转化为对象* * @param jsonData json数据* @param beanType 对象中的object类型* @return*/public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {try {T t = MAPPER.readValue(jsonData, beanType);return t;} catch (Exception e) {e.printStackTrace();}return null;}/*** 将json数据转换成pojo对象list* <p>Title: jsonToList</p>* <p>Description: </p>* @param jsonData* @param beanType* @return*/public static <T>List<T> jsonToList(String jsonData, Class<T> beanType) {JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);try {List<T> list = MAPPER.readValue(jsonData, javaType);return list;} catch (Exception e) {e.printStackTrace();}return null;}}

jsp页面

<%--Created by IntelliJ IDEA.User: VivianDate: 2019/9/26Time: 15:52To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title><script type="text/javascript" src="/js/kindeditor/kindeditor.js"></script><script type="text/javascript" src="/js/kindeditor/lang/zh_CN.js"></script><script type="text/javascript" src="/js/jquery-1.7.2.js"></script><script type="text/javascript">$(function(){var obj;KindEditor.ready(function(K) {obj= K.create('#text_id', {uploadJson : '/pic/upload',  //指定上传文件的服务器端的程序filePostName:'fileName',  //指定上传的文件名dir:"image"   //指定上传的文件类型});});//给按钮添加点击事件$("#but").click(function(){//将KindEditor中的数据同步到textarea中obj.sync();//通过ajax方式提交表单      serialize()作用:将表单中的数据序列化为key=value&key=value.....$.post("/content/save",$("#myForm").serialize(),function(data){if(data.status == 200){alert("提交成功");}else{alert("提交失败");}});});});</script>
</head>
<body>
<form id="myForm"><textarea rows="20" cols="20" id="text_id" name="desc"></textarea><input type="button" value="OK" id="but"/>
</form>
</body>
</html>

图片上传service实现类:

package com.zxw.service.impl;import com.zxw.commons.FtpUtil;
import com.zxw.commons.IDUtils;
import com.zxw.service.PicUploadService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@Service
public class PicUploadServiceImpl implements PicUploadService {@Value("${FTP_HOST}")private String FTP_HOST;@Value("${FTP_PORT}")private int FTP_PORT;@Value("${FTP_USERNAME}")private String FTP_USERNAME;@Value("${FTP_PASSWORD}")private String FTP_PASSWORD;@Value("${FTP_BASEPATH}")private String FTP_BASEPATH;@Value("${HTTP_BASE_PATH}")private String HTTP_BASE_PATH;@Overridepublic Map<String, Object> fileUpload(MultipartFile filename) {Map<String, Object> map = new HashMap<>();Date date = new Date();try {//根据上传时间创建文件夹,这样图片不会一直在一个文件夹里,防止图片同名覆盖SimpleDateFormat sdf = new SimpleDateFormat("/yyyy/MM/dd/");String path = sdf.format(date);String newFileName = IDUtils.genImageName()+filename.getOriginalFilename().substring(filename.getOriginalFilename().lastIndexOf("."));boolean flag = FtpUtil.uploadFile(this.FTP_HOST, this.FTP_PORT, this.FTP_USERNAME, this.FTP_PASSWORD, this.FTP_BASEPATH, path, newFileName, filename.getInputStream());if(flag){map.put("error", 0);//http://192.168.37.137/yyyy/MM/dd/newFileNamemap.put("url", this.HTTP_BASE_PATH+path+newFileName);}else{map.put("error", 1);map.put("message","上传失败");}} catch (IOException e) {map.put("error", 1);map.put("message","上传失败");e.printStackTrace();}return map;}
}

controller:

package com.zxw.web.controller;import java.util.Map;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;import com.zxw.commons.JsonUtils;
import com.zxw.service.PicUploadService;/*** 图片上传Controller* @author Administrator**/
@Controller
@RequestMapping("/pic")
public class PicUploadController {@Autowiredprivate PicUploadService picUploadService;/*** 图片上传*/@RequestMapping("/upload")@ResponseBodypublic String fileUpload(MultipartFile fileName){Map<String, Object> map = this.picUploadService.fileUpload(fileName);return JsonUtils.objectToJson(map);}
}
package com.zxw.web.controller;import java.util.HashMap;
import java.util.Map;import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import com.zxw.commons.JsonUtils;/*** 内容Controller* @author Administrator**/
@Controller
@RequestMapping("/content")
public class ContentController {/*** 内容保存*/@RequestMapping(value="/save",produces=MediaType.APPLICATION_JSON_VALUE)@ResponseBodypublic String saveContent(String desc){System.out.println(desc);Map<String, Object> map = new HashMap<>();map.put("status",200);return JsonUtils.objectToJson(map);}
}

结果:


http://chatgpt.dhexx.cn/article/RWk5Vw1D.shtml

相关文章

kindeditor 上传图片后端成功了,web显示上传失败 ,已解决

别人是什么都懂&#xff0c;然后写上代码教大家怎么做&#xff0c;而我只是一个被自己蠢哭的啥都不会的yang 今天我就来告诉大家&#xff0c;被自己蠢哭是啥意思 springboot实现图片上传&#xff0c;我以前不知道原来是有kindeditor这个html在线编辑器 大概长这样&#xff0c…

springboot中kindeditor 上传图片及其富文本的使用

话不多少&#xff0c;直接进入话题。 首先需要在前端页面中引入kindeditor 库 <script src"../js/kindeditor-all.js"></script>标注黄色的是重点&#xff0c;必须引入 其次写前端代码,注意我这个前端代码是springboot推荐的themleaf写的&#xff0c;其…

kindEditor的上传图片点击没反应,bug修复

基于layui的bug的层级问题 修改kindeditor.js中的811213全部替换为19892000 811212替换为19891999 811214替换为19892001 811211替换为19891998 基于电脑的显示问题x&#xff0c;y的坐标没有取整&#xff0c;有小数点不识别的问题 修改kindeditor.js中x&#xff0c;y的取整&am…

kindeditor 上传图片失败问题总结

1.近段时间一直在处理kindeditor上传图片失败的问题&#xff0c;前期一直以为是前端的问题&#xff0c;利用谷歌控制台&#xff0c;打断点&#xff0c;修改方法&#xff0c;一直都找不到解决方案&#xff0c;直到查看服务器配置&#xff0c;才发现&#xff1a; WEB 1号服务器 /…

KindEditor上传图片和修改图片

1.首先就是下载KindEditor&#xff08;这里是官网的地址&#xff09; 2. 部署编辑器 解压 kindeditor-x.x.x.zip 文件&#xff0c;将所有文件上传到您的网站程序目录里&#xff0c;例如&#xff1a;http://您的域名/editor/ Note 您可以根据需求删除以下目录后上传到服务器。…

kindeditor php 上传错误,kindeditor 上传图片失败,该怎么解决

本帖最后由 nxgg8 于 2014-05-29 12:44:04 编辑 编辑器版本&#xff1a;KindEditor 4.1.10 php框架&#xff1a;ThinkPHP3.2.2 这是html页面中引用编辑器配置 上传图片的时候出问题,不管是单张图片&#xff0c;还是批量。都会提示以下信息&#xff0c;返回的图片路径是正确的&a…

Kindeditor的简单使用以及图片上传

详细的笔者也不是特别懂&#xff0c;但是基本的使用还是会的 首先到官网下载相应的插件http://kindeditor.net/down.php&#xff0c;下载完的文件打开后是这样的&#xff0c;看着有点多 但是我们只取出需要的&#xff0c;只有这么一点&#xff0c;复制到项目下&#xff0c;取名…

KindEditor上传图片及使用

本文为原创&#xff0c;只为互相学习&#xff01; 主页:写程序的小王叔叔的博客欢迎来访&#x1f440; 支持:点赞收藏关注 社区:JAVA全栈进阶学习社区欢迎加入​​​​​​​ 编辑器使用 1&#xff09;官网&#xff1a;在线HTML编辑器 2&#xff09;使用 如果在编辑器中&#…

KindEditor上传本地图片

自己动手配置了一下KindEditor文本编辑器上传本地图片的功能&#xff0c;不需要动手写action&#xff0c;相关详细配置和代码如下。 我用的是KindEditor 4.1.10的版本&#xff0c;需要用到的童鞋去下载对应的版本。 1.↓↓↓这个插件里面需要手动配置的两个重要的jsp文件。 …

kindeditor4.1.10图片上传配置及使用说明

1效果展示 1.1 点击图片上传按钮 1.2 弹出选择框,可以从已上传的图片中选择上传,也可以从本地上传。 1.3选择从图片空间上传,文件夹模式浏览所有已上传的图片 1.4从本地选择图片上传 1.5上传效果 1.6 上传路径: WebRoot/upload/image 2-1:kindeditor-4.1.10版本插件 2-2:…

onpaste事件的浅谈

今天看书的时候&#xff0c;偶然看到onpaste的这个属性所以记录下来&#xff0c;为以后查阅而用&#xff1a; 具体的用法是<input type“text” οnpaste"function ***"/>&#xff0c;标签只是用来做说明并不是非得是input标签 虽然是触发的条件是&#xff1…

手机html粘贴事件,详解浏览器中的粘贴事件 paste onpaste 事件

在最新的H5 API里已经有了对粘贴事件的支持, 事件名为paste, 平时用的较少,但最近想做一个粘贴板管理器,于是就调研了一下这个粘贴,复制事件. 那么调研的第一步是什么那? 当然是百度了,但高手都不百度,直接控制台调试 创建一个id为editor的文本域, 为其添加一个paste事件的…

onkeyup事件,onpaste事件,完成实时表单验证

先上效果图&#xff1a; input框&#xff0c;用户输入值的方式就两种&#xff0c;一种是键盘输入&#xff0c;一种是鼠标粘贴。onkeyup事件可以在键盘输入的时候绑定事件&#xff0c;onpaste"return false"&#xff0c;设置不允许粘贴。 onkeyup进行表单验证的优…

利用JavaScript从剪贴板获取图片并上传服务器

1、参考&#xff1a; 使用 JavaScript File API 实现文件上传FileReader.readAsDataURL()基于Servlet3的文件上传中的示例2&#xff1a;基于JQuery的单文件上传 2、onpaste 剪贴板事件 onpaste 事件在用户向元素中粘贴文本时触发。有三种方式可以在元素中粘贴内容&#xff1…

Internet协议的安全性

网际层 安全问题 1.IP数据报在传递过程中被窃取 措施&#xff1a;读ip数据报进行加密 2.数据净荷可能被截取后修改 措施&#xff1a;对ip数据净荷进行完整性检测 3. 攻击者发送伪造源地址数据包欺骗接收者&#xff0c;也称为ip欺骗 措施&#xff1a;对数据包的源地址鉴别 4. A…

winget InternetOpenUrl() failed. 0x80072f7d

今天使用 winget 安装东西的时候提示&#xff1a; 尝试更新源时失败&#xff1a; winget 执行此命令时发生意外错误&#xff1a; InternetOpenUrl() failed. 0x80072f7d : unknown error对于我而言是因为其他原因关闭了 tls 1.2&#xff0c;在控制面板->网络和 Internet-&g…

Internet网际协议 --- IP地址

IP地址 一.IP地址简介二.分类IP地址三.IP子网划分与子网掩码四.无类域间路由CIDR五.路由聚合六.IP包转发 一.IP地址简介 1.IP地址&#xff0c;网络上的每一台主机&#xff08;或路由器&#xff09;的每一个接口都会分配一个全球唯一的32位的标识符。 2.将IP地址划分为固定的类…

HTTP-web-Internet

互联网&#xff08;Internet&#xff09; 互联网&#xff1a;将全球计算机互联在一起的网络。目前最流行的实现协议是TCP/IP。 万维网&#xff08;WWW&#xff09; 万维网&#xff1a;基于HTTP协议实现全球性、动态交互、跨平台的分布式图形信息系统。是互联网上应用最为广泛的…

internet协议

1&#xff1a;引言 IP时TCP/IP中的核心协议IP提供了一种尽力而为&#xff0c;无连接的数据报交付服务 2&#xff1a;IP头部 正常的IPV4头部大小为20字节。除非存在选项&#xff08;少见&#xff09;IPV6的长度是40字节&#xff0c;没有选项字段&#xff0c;IPV6有扩展头部 …

Internet网际协议---IPv4协议

IPv4协议 一.IPv4协议简介二.IPv4数据报格式&#xff08;由首部和数据组成&#xff09;三.数据报分片与重组四.IP协议功能及报头字段总结 一.IPv4协议简介 1.IPv4协议&#xff1a;网际协议版本4&#xff0c;一种无连接的协议&#xff0c;是互联网的核心&#xff0c;也是使用最…