热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

1.HTML标签与jquery代码编辑富文本框KindEditor.ready(function(K){vareditorK.create(#editor_id,{themeTyp

1. HTML标签与jquery代码

// 编辑富文本框

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 = "%22+url+%22";

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);

}

}

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 extMap = new HashMap();

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 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. 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编辑器,了解更多请参考官网文档;



推荐阅读
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 在ElasticStack日志监控系统中,Logstash编码插件自5.0版本起进行了重大改进。插件被独立拆分为gem包,每个插件可以单独进行更新和维护,无需依赖Logstash的整体升级。这不仅提高了系统的灵活性和可维护性,还简化了插件的管理和部署过程。本文将详细介绍这些编码插件的功能、配置方法,并通过实际生产环境中的应用案例,展示其在日志处理和监控中的高效性和可靠性。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • importpymysql#一、直接连接mysql数据库'''coonpymysql.connect(host'192.168.*.*',u ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • C# 中 SQLite 报错:在 "\\s\\" 附近出现语法错误,如何解决? ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
  • 在最近的项目中,我们广泛使用了Qt框架的网络库,过程中遇到了一些挑战和问题。本文旨在记录这些经验和解决方案,以便日后参考。鉴于我们的客户端GUI完全基于Qt开发,我们期望利用其强大的网络功能进行Fiddler网络数据包的捕获与分析,以提升开发效率和应用性能。 ... [详细]
author-avatar
ss29566982
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有