KindEditor富文本框编辑器上传图片功能实现,基于java项目

1. HTML标签与jquery代码

<textarea id="editor_id" style="width: 200px; height: 200px;"></textarea>

<script type="text/javascript" src="../js/jquery.min.js"></script>
<script type="text/javascript" src="../kindeditor4.1.11/kindeditor-all.js"></script>
<script type="text/javascript" src="../kindeditor/kindeditor4.1.11/lang/zh-CN.js"></script>

<script type="text/javascript">
// 编辑富文本框
KindEditor.ready(function(K) {
var editor = K.create(‘#editor_id‘, {
themeType : "simple",
uploadJson : CONTEXT_PATH + "transportations/describe/upload",
resizeType : 1,
imageTabIndex : 1,
filterMode : true,
allowPreviewEmoticons : false,
allowImageUpload : true,
allowFileManager : true,
afterBlur : function() {
this.sync();
},
afterUpload : function(url) {
//上传图片后的代码
var image = "<img src=‘"+url+"‘/>";
insertHtmlAtCaret(image);
},
items : [ ‘source‘, ‘undo‘, ‘redo‘, ‘plainpaste‘, ‘wordpaste‘, ‘clearhtml‘, ‘quickformat‘, ‘selectall‘, ‘fullscreen‘, ‘fontname‘, ‘fontsize‘, ‘|‘, ‘forecolor‘,
‘hilitecolor‘, ‘bold‘, ‘italic‘, ‘underline‘, ‘hr‘, ‘removeformat‘, ‘|‘, ‘justifyleft‘, ‘justifycenter‘, ‘justifyright‘, ‘insertorderedlist‘,
‘insertunorderedlist‘, ‘|‘, ‘link‘, ‘image‘, ‘unlink‘, ‘baidumap‘, ‘emoticons‘ ]
});
});

// 在光标处添加内容
function insertHtmlAtCaret(html) {
var sel, range;
if (window.getSelection) {
sel = window.getSelection();
if (sel.getRangeAt && sel.rangeCount) {
range = sel.getRangeAt(0);
range.deleteContents();
var el = document.createElement("textarea");
el.innerHTML = html;
var frag = document.createDocumentFragment(), node, lastNode;
while ((node = el.firstChild)) {
lastNode = frag.appendChild(node);
}
range.insertNode(frag);
if (lastNode) {
range = range.cloneRange();
range.setStartAfter(lastNode);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
}
}
} else if (document.selection && document.selection.type != "Control") {
document.selection.createRange().pasteHTML(html);
}
}
</script>

2. java后台实现

/**
*
* 富文本框编辑-上传图片
*
* @param localUrl
* @return
* @throws IOException
* @throws FileUploadException
*/
@RequestMapping(value = "upload")
public void uploadImg(HttpServletRequest request, HttpServletResponse response)
{
// 设置Response响应的编码
response.setContentType("text/html; charset=UTF-8");

// 获取一个Response的Write对象
PrintWriter writer = null;

try
{
writer = response.getWriter();

// 文件保存目录路径
String savePath = request.getServletContext().getRealPath("/") + "attached/";

// 文件保存目录URL
String saveUrl = request.getContextPath() + "/attached/";

// 定义允许上传的文件扩展名
HashMap<String, String> extMap = new HashMap<String, String>();
extMap.put("image", "gif,jpg,jpeg,png,bmp");

// 最大文件大小
long maxSize = 1000000;

// 判断是否是一个文件
if (!ServletFileUpload.isMultipartContent(request))
{
writer.println(getError("请选择文件。"));
return;
}

// 检查目录upload, 没有则创建一个
File uploadDir = new File(savePath);
if (!uploadDir.isDirectory())
{
uploadDir.mkdirs();
}

// 检查目录写权限
if (!uploadDir.canWrite())
{
writer.println(getError("上传目录没有写权限。"));
return;
}

String dirName = request.getParameter("dir");
if (dirName == null)
{
dirName = "image";
}
if (!extMap.containsKey(dirName))
{
writer.println(getError("目录名不正确。"));
return;
}

// 创建文件夹
savePath += dirName + "/";
saveUrl += dirName + "/";
File saveDirFile = new File(savePath);
if (!saveDirFile.exists())
{
saveDirFile.mkdirs();
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String ymd = sdf.format(new Date());
savePath += ymd + "/";
saveUrl += ymd + "/";
File dirFile = new File(savePath);
if (!dirFile.exists())
{
dirFile.mkdirs();
}

DefaultMultipartHttpServletRequest servletRequest = (DefaultMultipartHttpServletRequest) request;
Iterator<String> iterator = servletRequest.getFileNames();
while (iterator.hasNext())
{
MultipartFile file = servletRequest.getFile(iterator.next());
String fileName = file.getOriginalFilename();

// 检查文件大小
if (file.getSize() > maxSize)
{
writer.println(getError("上传文件大小超过限制。"));
return;
}

// 检查扩展名
String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
if (!Arrays.<String> asList(extMap.get(dirName).split(",")).contains(fileExt))
{
writer.println(getError("上传文件扩展名是不允许的扩展名。\n只允许" + extMap.get(dirName) + "格式。"));
return;
}

// 以时间重新命名文件名
String newFileName = CommonUtils.newFileName(fileName);

File uploadedFile = new File(savePath, newFileName);
file.transferTo(uploadedFile);

JSONObject obj = new JSONObject();
obj.put("error", 0);
obj.put("url", saveUrl + newFileName);

writer.println(obj.toJSONString());
}
}
catch (Exception e)
{
logger.error("上传文件失败!" + e.getMessage());
}
finally
{
// 将writer对象中的内容输出
writer.flush();
// 关闭writer对象
writer.close();
}
}

/**
*
* 上传图片-响应错误信息
*
* @author 戴飞
* @param message
* @return
*/
private String getError(String message)
{
JSONObject obj = new JSONObject();
obj.put("error", 1);
obj.put("message", message);

return obj.toJSONString();
}

关于KindEditor编辑器,了解更多请参考官网文档;

原文地址:https://www.cnblogs.com/df-blog/p/10275281.html

时间: 2024-10-10 20:08:19

KindEditor富文本框编辑器上传图片功能实现,基于java项目的相关文章

kindeditor富文本框,上传文件后,显示文件名称

kindeditor作为一个应用广泛富文本框,我们经常会利用到它,然而在使用的过程中,发现有的地方使用起来很不方便,例如本文要说的,用户上传文件之后,默认只有文件URL,没有文件说明,如图: 点击确定之后,内容中显示的只是一串很长的地址,这并不是我们想要的. 更多的时候,我们只是希望它这里能默认显示文件名称,只有在文件说明里,填写了文件名称,在内容里面才会以名称的形式呈现.这个时候,我们就要给它做个小手术,来完善它,下面贴出代码: 1.修改asp.net/upload_json.ashx文件,大

kindeditor富文本框使用方法

这周我一共使用了两个文本框编辑器!我的上一篇文档讲的是wangeditor这个编辑器,现在就来讲讲kindeditor这个编辑器! 首先还是去它的官网去下载脚本! http://kindeditor.net/demo.php 所做的操作和那个wangeditor编辑器差不多都是需要在你的HTML的<body>里面加上下面这段标签: 1 <textarea style="width: 98%;" rows="15" name="Conten

富文本框编辑器 推荐kindeditor

官方:http://kindeditor.net/index.php

Ext.net里面放置KindEditor富文本框(解决KindEditor不显示和后台取不到值的问题)

上周六,从上午10点到晚上12点终于搞定了Ext.net与KindEditor的兼容性问题.对于Ext.net的原理,我是菜鸟,表示不懂.我遇到的两个问题是,问题一是不显示KindEditor控件,通过ext:ResourceManager里面的 <DocumentReady Handler="createEditor();" /> 解决了,问题二是KindEditor控件的值传不会后台去,就是在前台也收不到值,但是我通过点击全屏按钮后就可以收到其值了,于是采用<Cl

富文本HTML编辑器UEditor

Baidu百度开源富文本HTML编辑器UEditor JS代码网 发表于: 2013-10-30 分类:HTML编辑器  点击:2133  UEditor是由百度web前端研发部开发所见即所得富文本HTML编辑器,功能非常强大,几乎 你想到的功能都有,同时还具有轻量,可定制,注重用户体验等特点,开源基于BSD协议, 允许自由使用和修改代码. 主要特点: 1.功能全面 涵盖- 阅读全文 国内知名HTML编辑器KindEditor JS代码网 发表于: 2013-10-28 分类:HTML编辑器  

操作富文本框

富文本框常见的技术用到了Frame标签,并且在Frame里面实现了一个完整的HTML网页结构. 方法一: #!usr/bin/env python #-*- coding:utf-8 -*- """ @author: sleeping_cat @Contact : [email protected] """ #操作富文本框 from selenium import webdriver import unittest,traceback,time

webdriver高级应用- 操作富文本框

富文本框的技术实现和普通的文本框的定位存在较大的区别,富文本框的常见技术用到了Frame标签,并且在Frame里面实现了一个完整的HTML网页结构,所以使用普通的定位模式将无法直接定位到富文本框对象. 方法一:调用WebDriver的send_key()方法实现 #encoding=utf-8 from selenium import webdriver import unittest, time, traceback from selenium.webdriver.support.ui imp

轻量级web富文本框——wangEditor使用手册(2)——扩展一个“缩进”功能

1. 引言 上一节<轻量级web富文本框——wangEditor使用手册(1)——基本应用>中我们讲解了如何应用wangEditor创建最基本的富文本编辑器,本节继续讲如何扩展一个简单的按钮.本节是继续上一节的内容来的,所使用的代码也是接着上一节的来的,错过的朋友请先看上一节,再看本节. 下载地址:https://github.com/wangfupeng1988/wangEditor demo演示:http://www.cnblogs.com/wangfupeng1988/p/4185508

富文本框KindEditor的使用技巧

富文本框KindEditor的使用技巧 最近在项目中经常遇到使用富文本框的情况,当然我们所接触的富文本.框有很多,我个人还是比较偏向于KE(KindEditor)),用起来比较舒服,但是很多新手在用的时候往往会感到不知所措.总感觉API写了很多但是就是不知道怎么去用,今天我就和大家讲讲KE的使用和基本技巧: 第一步:我们需要到官网上引用相关的资源包,点击进入官网下载资源包 第二步:引用资源文件 如图所示第一个default.css主要是为了修改我们KE的样式,第二个kindeditor-min.