天天看点

summernote富文本编辑器保存复制 img 图片

//富文本监听事件   页面js监听富文本copy事件,正则表达式解析img标签获取图片路径
var imgReg =  " /<img.*?(?:>|\\/>)/gi";
var srcReg =  /src=[\'\"]?([^\'\"]*)[\'\"]?/i;
var reg = "[a-zA-z]+://[^\s]*";
 // arr 为包含所有img标签的数组
$('#content_sn').summernote({
    callbacks: {
        onPaste: function (e) {
            console.log(e)
           setTimeout(function () {

            var str = $("#content_sn").summernote('code');
            //匹配图片(g表示匹配所有结果i表示区分大小写)
            var imgReg = /<img.*?(?:>|\/>)/gi;
            //匹配src属性
            var srcReg = /src=[\'\"]?([^\'\"]*)[\'\"]?/i;
            var arr = str.match(imgReg);
            //alert('所有已成功匹配图片的数组:'+arr);

            for (var i = 0; i < arr.length; i++) {
                var src = arr[i].match(srcReg);
                //当然你也可以替换src属性
                if (src) {
                    // var  imgpath =  encodeURI(src[1]);
                    // alert(imgpath);
                    $.ajax({
                        url : '/cms/file/pathupload',
                        type : 'POST',
                        data : {"imgpath":src[1]},
                        async : false,
                        success : function(data) {
                            str = str.replace(src[0], 'src="'+data.data+'"');
                            if(data.code == 0){
                                //$("#img").val(data.data);
                            }else{
                                alert("失败");
                            }
                        }
                    });
                    // updateimage(src[0],function(data){
                    //     console.log(data);
                    // });
                    //alert(str.replace(src[0],(i + 1)+ "href")+"-------")
                }

            }
               $("#content_sn").summernote('code',str);
           },1000);
            }
        }

});
           

后台获取图片绝对路径,上传文件,返回上传文件的路径用户前台替换

public String saveImgPath(String path) throws Exception {
    //String path = "C:/Users/ADMINI~1/AppData/Local/Temp/ksohtml/wps21D3.tmp.jpg";
    String pathName="";
    String pathName_="";
    try{
        path =  path.replace("file:///","");  //去掉file前缀
        pathName_ = "/image/" + Instant.now().getEpochSecond() + "/" +
                UUIDUtil.uuid() + "." +
                StringUtils.substringAfterLast(path+"", ".");

        pathName = filePath + pathName_;
        File newFile = new File(pathName);
        if (!newFile.exists()) {
            newFile.getParentFile().mkdirs();
            //newFile.createNewFile();
        }

        //读取文件(字节流)
        InputStream in = new FileInputStream(path);
        //写入相应的文件
        OutputStream out = new FileOutputStream(pathName);
        //读取数据
        //一次性取多少字节
        byte[] bytes = new byte[2048];
        //接受读取的内容(n就代表的相关数据,只不过是数字的形式)
        int n = -1;
        //循环取出数据
        while ((n = in.read(bytes,0,bytes.length)) != -1) {
            //转换成字符串
            //String str = new String(bytes,0,n,"UTF-8");//这里可以实现字节到字符串的转换,比较实用
            // System.out.println(str);
            //写入相关文件
            out.write(bytes, 0, n);
        }
        //关闭流
        in.close();
        out.close();
    }catch (Exception e){
        e.printStackTrace();
        throw  new Exception("上传失败");
    }

    return  "/images" + pathName_;
}