1、前端初始化

var imgReg = " /<img.*?(?:>|\\/>)/gi";

var srcReg = /src=[\'\"]?([^\'\"]*)[\'\"]?/i;

var reg = "[a-zA-z]+://[^\s]*";

$('.summernote1').summernote({

height: 200,

tabsize: 2,

lang: 'zh-CN',

callbacks : {

onPaste : function(e) {

console.log(e)

setTimeout(function() {

var str = $('.summernote1').summernote('code');

//匹配图片(g表示匹配所有结果i表示区分大小写)

var imgReg = /<img.*?(?:>|\/>)/gi;

//匹配src属性

var srcReg = /src=[\'\"]?([^\'\"]*)[\'\"]?/i;

var arr = str.match(imgReg);

if(arr != null) {

/* var formData = new FormData(); */

for (var i = 0; i < arr.length; i++) {

var src = arr[i].match(srcReg);

//当然你也可以替换src属性

if (src) {

$.ajax({

url : "${pageContext.request.contextPath}/knowledgePoint/saveParseImg.do?id=${knowledgePoint.id}&pathName=" + src[1],

type : 'post',

async: false,

/* data : formData, */

processData : false,

contentType : false,

success : function(data) {

str = str.replace(src[0], 'src="' + data + '"');

$('.summernote1').summernote('code', str);

}

});

}

}

}

}, 1000);

}

}

});

2、后台保存方法

@RequestMapping("/saveParseImg")

@ResponseBody

public String savePasteImg(String id, String pathName, HttpServletRequest request) {

StringBuffer requestURL = request.getRequestURL();

String domainURL = requestURL.delete(requestURL.length() - request.getRequestURI().length(), requestURL.length()).append(request.getServletContext().getContextPath())

.append("/").toString();

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");

String oriFileName = "";

String newFileName = "";

String errorMessage = null;

String type = "attachment";

HttpURLConnection conn = null;

BufferedInputStream bis = null;

FileOutputStream out = null;

InputStream in = null;

try {

String folder = request.getServletContext().getRealPath("");

StringBuffer savePath = new StringBuffer(folder).append(File.separator).append("knowledgebase").append(File.separator).append(id).append(File.separator)

.append(type).append(File.separator);

File f1 = new File(savePath.toString());

if (!f1.exists())

f1.mkdirs();

// 生成目录

String[] arr = pathName.split("/");

oriFileName = arr[arr.length - 1]; //pathName.split("/")[-1];

int index = oriFileName.indexOf(".");

String ext = oriFileName.substring(index);

if (ext.equals(".jpg") || ext.equals(".bmp") || ext.equals(".png") || ext.equals(".gif") || ext.equals(".pdg") || ext.equals(".jpeg")) {

type = "images";

StringBuffer savePath2 = new StringBuffer(folder).append(File.separator).append("knowledgebase").append(File.separator).append(id).append(File.separator).append(type).append(File.separator);

File f2 = new File(savePath2.toString());

if (!f2.exists())

f2.mkdirs();

int idRom = (int) ((Math.random() * 9 + 1) * 10000);

String rom = Integer.toString(idRom);

newFileName = dateFormat.format(new Date()) + rom + ext;

File uploadFile = new File(savePath2 + newFileName);

URL httpUrl = new URL(pathName);

conn = (HttpURLConnection) httpUrl.openConnection();

conn.setRequestMethod("GET");

conn.setDoInput(true);

conn.setDoOutput(true);

conn.setUseCaches(false);

conn.connect();

out = new FileOutputStream(uploadFile);

in = conn.getInputStream();

bis = new BufferedInputStream(in);

byte[] bytes = new byte[1024];

int len = 0;

while ((len = bis.read(bytes)) != -1) {

out.write(bytes, 0, len);

}

StringBuffer url = new StringBuffer(domainURL).append(Constants.KNOWLEDGE_BASE_ROOT_PATH).append(id).append("/").append(type).append("/").append(newFileName);

String urlNew = url.toString();

return urlNew;

} else {

if (ext.equals(".jsp")) {

errorMessage = "拒绝上传JSP类型文件";

}

int idRom = (int) ((Math.random() * 9 + 1) * 10000);

String rom = Integer.toString(idRom);

newFileName = dateFormat.format(new Date()) + rom + ext;

File uploadFile = new File(savePath + newFileName);

URL httpUrl = new URL(pathName);

conn = (HttpURLConnection) httpUrl.openConnection();

conn.setRequestMethod("GET");

conn.setDoInput(true);

conn.setDoOutput(true);

conn.setUseCaches(false);

conn.connect();

out = new FileOutputStream(uploadFile);

in = conn.getInputStream();

bis = new BufferedInputStream(in);

byte[] bytes = new byte[1024];

int len = 0;

while ((len = bis.read(bytes)) != -1) {

out.write(bytes, 0, len);

}

StringBuffer url = new StringBuffer(domainURL).append(Constants.KNOWLEDGE_BASE_ROOT_PATH).append(id).append("/").append(type).append("/").append(newFileName);

String urlNew = url.toString();

return urlNew;

}

} catch (Exception ex) {

errorMessage = "上传失败:" + ex;

} finally {

try {

if(in != null) {

in.close();

}

if(bis != null) {

bis.close();

}

if(out != null) {

out.close();

}

} catch (Exception e2) {

e2.printStackTrace();

}

}

return "";

}

summernote复制无法保存图片问题相关推荐

  1. 移动web开发都会遇到的坑(会持续更新)

    1.自适应第一招 <meta name="viewport" content="width=device-width,initial-scale=1.0,user- ...

  2. 苹果6怎样打开html,苹果iPhone的Safari浏览器使用技巧图解

     大多数的 iPhone 用户们都是用的 iOS 系统自带的 Safari 浏览器,不过很多用户们对 Safari 浏览器却不是很熟悉,因为 Safari 毕竟没有国产浏览器这么动我们!这厢脚本之家 ...

  3. 小程序 getphonenumber_小程序入门,看这一篇就够了!

    文章为实战中踩坑经历,以及解决方案.同时是自己的一个项目回顾,在这里分享给大家,希望能帮助到大家.文章内代码需要左右滑动噢~ 登录授权 授权(基本信息,手机号码 )必须使用小程序原生的的button组 ...

  4. 教你用Python爬取妹子图APP

    教你用Python爬美之图APP全站图片 爬取结果 程序只运行了2h,最后认为程序没有问题了就关了(我可不是去杀生去了...... 运行环境 Python 3.5+ Windows 10 VSCode ...

  5. Android手机哪个悬浮好用,别羡慕苹果了,安卓悬浮神器比 iPhone 好用太多!

    都 2021 年了,你还不知道安卓悬浮球是款神器? 就在不久前,小黑被友人如此嘲讽.作为一名经常接触数码科技的资深搞机党,小黑一直对悬浮球应用嗤之以鼻.原因也很简单,悬浮球给小黑带来的体验过于差劲. ...

  6. android 仿iphone多任务管理效果,别羡慕苹果了,安卓悬浮神器比 iPhone 好用太多!...

    原标题:别羡慕苹果了,安卓悬浮神器比 iPhone 好用太多! 都 2021 年了,你还不知道安卓悬浮球是款神器? 就在不久前,小黑被友人如此嘲讽.作为一名经常接触数码科技的资深搞机党,小黑一直对悬浮 ...

  7. 解决ios与安卓兼容问题 --- css

    1:ios端input.button样式不生效 .input{-webkit-appearance: none;/*解决ios样式问题*/ } 2:ios端禁用屏幕缩放 <meta conten ...

  8. 小程序导出朋友圈海报详细记录

    小程序提供了转发给好友的接口,但是没提供分享到朋友圈的接口.于是,只有引导用户保存图片分享到朋友圈. 两种方案:用微信 api 手动保存,用 painter. 微信 api 使用原生接口的话,大致是使 ...

  9. 微信小程序之canvas画图

    开题 前几天接到个需求,长按图片保存到相册,该图片上有用户头像和昵称以及对应的二维码:那这就不能直接当作图片来操作了,要先把整体图片画出来:我当时用的是canvas.效果图如下: canvas dra ...

最新文章

  1. The Road to learn React书籍学习笔记(第三章)
  2. 2018,开工第一天
  3. 缓冲区 cin() getline() getchar()
  4. 懂集合吗?对,是dart中的集合
  5. 2 计算机组成原理第二章 数据的表示和运算 定点数运算 浮点数运算
  6. 360搜索下拉词下拉框获客方案分享
  7. 如何下载武汉市OSM数据并导出为shp格式
  8. (转)Windows 7 with SP1中英文原版MSDN下载汇总(全版本收录完毕)
  9. sqlyog简单入门使用
  10. Unix编程艺术-原则
  11. OpenCV C++安装和配置
  12. QT6程序全屏和隐藏鼠标指针笔记
  13. 【网络】正向代理和反向代理
  14. Flutter绘制指南06-颜色的基本操作
  15. 论文投稿指南——中文核心期刊推荐(环境科学 2)
  16. 【新手上路】语法入门算法入门题单
  17. 童年修复系列-PC Engine/TurboGrafx-16介绍及FPGA实现
  18. 电脑关不掉计算机窗口,电脑关不掉怎么办?
  19. python 分类变量xgboost_python小白之路:第十九章 XGBoost
  20. 基于位置服务(Location Based Service)lbs

热门文章

  1. 出租车计价(15 分)
  2. 超级块,i节点,数据块,目录块,间接块
  3. oracle 自连接层次查询,使用自连接查询居然比直接查询效率高很多,何解?
  4. 防关联浏览器使用案例:安全、电子商务、营销
  5. 【UE 从零开始制作坦克】1-控制坦克视角
  6. 2022年华南理工大学计算机考研复试时间
  7. fastp原理及简单介绍
  8. daysmatter安卓版_days matter最新版下载-Days Matter倒数日软件下载v2.2.1 安卓版-单机手游网...
  9. 其他笔记 - 编译Gazebo依赖以及源码过程 - Ubuntu 18.04,gazebo11
  10. 102届秋季广交会参展准入管理规定 2007年广交会参展准入资质标准