精华内容
下载资源
问答
  • 上传照片编辑代码

    2018-03-15 22:01:34
    上传头像编辑剪裁代码,轻松搞定上传头像编辑问题!!!!!
  • 简单的编辑器 能上传图片和文字自动排版样式简介了排版了
  • 图片编辑上传控件

    2016-10-25 11:10:05
    图片编辑上传控件
  • 主要为大家详细介绍了vue上传图片组件的编写代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • extjs htmleditor 图片上传和添加网络图片编辑
  • 但是点击上传图片按钮后发现,无法正常进行图片上传,文件上传也是失败的,问题都是Flash Player需要升级, 因此在火狐浏览器中安装对应的flash player组件,选择其中一个工作: 此时,文件上传图片上传功能就能...
  • 该技术实现了批量上传图片的功能,前台是jsp页面。后台是java语言编写的类文件。
  • 主要介绍了使用富文本编辑上传图片实例详解的相关资料,需要的朋友可以参考下
  • C#编写图片上传程序

    2011-12-30 10:23:02
    1,PictureBox显示图片; 2,按上传按钮后图片上传到服务器(目前用电脑内的硬盘代替)...5,上传图片的路径可自动存储于XML文件中,点击页面的“读取XML”按钮可读取XML文件,弹出的MessageBox显示当前上传的图片路径。
  • UEditor编辑上传图片是自动提取的,但是图片没有水印功能,下面小编各位一起来看看。 UEditor编辑器没有上传图片加水印的功能,需要进行二次开发,本例是在PHPCMS系统中对百度编辑器进行二次开发,添加上传图片...
  • 现在在web端的输入框需要直接复制图片进去,于是就用上了富文本编辑器。 正文 在研究了多个富文本编辑器后,基于免费、好用、简洁的原则(主要是基于免费),最终选择使用wangEditor。 使用场景 从Word中复制图片、...

    “刘郎已恨蓬山远,更隔蓬山一万重”

    现在做的是从web端给眼镜端发送消息,其实就是web端把消息存到数据库,然后眼镜从数据库获取消息即可。现在在web端的输入框需要直接复制图片进去,于是就用上了富文本编辑器。

    正文

    在研究了多个富文本编辑器后,基于免费、好用、简洁的原则(主要是基于免费),最终选择使用wangEditor
    使用场景
    从Word中复制图片、文字、标题、部分带样式的文字到编辑器中。可实现取出文字和图片的功能,不包含Word上的样式,比如加粗、斜体等样式。
    说明:以下内容均基于该使用场景。
    使用方法

    1. 下载wangEditor的JS。
      官网首页有个下载,点下载之后进入GitHub,选择要下载的版本后,下载source code压缩包。然后从压缩包中把JS取出来:
      在这里插入图片描述
    2. 将上面说的JS复制你的项目中,然后在页面上引用。
    <script src="/js/wangEditor.min.js"></script>
    

    创建一个富文本编辑器:

    <script type="text/javascript">
    	var editor ;	//定义全局变量
    	//富文本编辑器
    	var E = window.wangEditor;
    	editor = new E('#textarea');
    	editor.customConfig.uploadImgShowBase64 = true;   // 使用 base64 保存图片,使用这种方式上传图片,然后在服务器端把base64编码转成图片。这样就不需要上传文件了。
    	editor.customConfig.menus = [];	//设置不要工具栏
    	editor.create();
    	</script>
    
    1. 获取富文本编辑器的内容
    var editorData = editor.txt.html();
    

    获取编辑器的内容还有其他方式:

    var editorData = editor.txt.text();
    //或者
    var editorData = editor.txt.getJSON();
    

    具体参考文档:读取内容

    1. 通过editor.txt.html();读取的内容都含有样式,(如果是通过通过Word粘贴进去的文本或图片,请看步骤6)比如p标签,img标签之类的,所以需要去除这些标签,直接把p标签里面的内容和img标签图片的base64编码取出来,用到正则表达式:
    //获取编辑器的内容
    var editorData = editor.txt.html();
    //定义一个图片编码和文字的数组
    var picArr = new Array();
    var wordArr = new Array();
    //获取图片编码的正则
    var p = /<img\s?src="data\:image\/.*?;base64,(.*?)"/ig;
    while(true){
    	var match = p.exec(editorData);
    	if(match){
    		picArr.push(match[1]);
    	}else{
    		break;
    	}
    }
    
    //获取p标签中的文字
    p = /<p>([^<]*?)<\/p>/ig;
    while(true){
    	var match = p.exec(editorData);
    	if(match){
    		//判断是否全是空格
    		if (!match[1].match(/^[ ]*$/)) {
    			wordArr.push(match[1]);
    		}
    	}else{
    		break;
    	}
    }
    
    1. 通过上面代码就能获取到在编辑器中输入的文字,或者是从Word中粘贴过去的图片。然后通过文字数组和图片编码的数组,传到服务端处理就可以了。
    2. 但是如果从Word上粘贴文字到编辑器的话,会有很多样式,比如:加粗、斜体、下划线等,这种情况的需要去除这些样式文本,我把整个的代码都贴出来:

    直接可以用的JS代码:

    function getEditorData(){
    	//处理富文本编辑器的数据
    	var picArr = new Array();
    	var editorData = editor.txt.html();
    	//处理Word复制过来的样式
    	editorData = cleanPastedHTML(editorData);
    	//获取图片
    	var p = /<img\s?src="data\:image\/.*?;base64,(.*?)"/ig;
    	while(true){
    		var match = p.exec(editorData);
    		if(match){
    			picArr.push(match[1]);
    		}else{
    			break;
    		}
    	}
    	var wordArr = new Array();
    	//获取图片后面紧跟的文字,由于紧跟在图片后面,所以通过p标签获取文字的正则获取不到。
    	p = /">(.*?)<br>/ig;
    	while(true){
    		var match = p.exec(editorData);
    		if(match){
    			if (match[1] != '') {
    				wordArr.push(match[1]);
    			}
    		}else{
    			break;
    		}
    	}
    	//获取标题内容,因为Word中的标题,在富文本编辑器中获取出来都带<h1></h1>或<h2></h2>等
    	p = /<h\d>(.*?)<\/h\d>/ig;
    	while(true){
    		var match = p.exec(editorData);
    		if(match){
    			//判断是否全是空格
    			if (!match[1].match(/^[ ]*$/)) {
    				wordArr.push(match[1]);
    			}
    		}else{
    			break;
    		}
    	}
    	//获取p标签中的文字
    	p = /<p>([^<]*?)<\/p>/ig;
    	while(true){
    		var match = p.exec(editorData);
    		if(match){
    			//判断是否全是空格
    			if (!match[1].match(/^[ ]*$/)) {
    				wordArr.push(match[1]);
    			}
    		}else{
    			break;
    		}
    	}
    }
    
    
    //去掉Word复制过来的样式
    function cleanPastedHTML(input) {
    	// 1. remove line breaks / Mso classes
    	var stringStripper = /(\n|\r| class=(")?Mso[a-zA-Z]+(")?)/g;
    	var output = input.replace(stringStripper, ' ');
    	// 2. strip Word generated HTML comments
    	var commentSripper = new RegExp('<!--(.*?)-->','g');
    	var output = output.replace(commentSripper, '');
    	var tagStripper = new RegExp('<(/)*(meta|link|span|\\?xml:|st1:|o:|font)(.*?)>','gi');
    	// 3. remove tags leave content if any
    	output = output.replace(tagStripper, '');
    	// 4. Remove everything in between and including tags '<style(.)style(.)>'
    	var badTags = ['style', 'script','applet','embed','noframes','noscript'];
    
    	for (var i=0; i< badTags.length; i++) {
    		tagStripper = new RegExp('<'+badTags[i]+'.*?'+badTags[i]+'(.*?)>', 'gi');
    		output = output.replace(tagStripper, '');
    	}
    	// 5. remove attributes ' style="..."'
    	var badAttributes = ['style', 'start'];
    	for (var i=0; i< badAttributes.length; i++) {
    		var attributeStripper = new RegExp(' ' + badAttributes[i] + '="(.*?)"','gi');
    		output = output.replace(attributeStripper, '');
    	}
    	//去掉下划线、删除线、斜体、加粗等标签
    	output = output.replaceAll("<b>","").replaceAll("</b>","").replaceAll("<i>","").replaceAll("</i>","").replaceAll("<u>","")
    			.replaceAll("</u>","").replaceAll("<s>","").replaceAll("</s>","").replaceAll("<p >","<p>");
    	return output;
    }
    
    //全部替换方法
    String.prototype.replaceAll  = function(s1,s2){
    	return this.replace(new RegExp(s1,"gm"),s2);
    };
    
    1. 我再把后台处理base64编码成图片的方法再贴一下:
    //先把base64编码转成流,imgBase64Code就是前台传过来的图片编码,由于我这里把图片编码加到数组里了,所以要先循环数组,这里省略了循环。
    byte[] byt = Base64Utils.decode(imgBase64Code);
    //再把流写成文件,fileName是随机生成的文件名,filePath是要存储的路径
    FileUtil.uploadFile(byt, filePath, fileName);
    
    
    public static byte[] decode(String s) {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
          try {
              decode(s, bos);
          } catch (IOException e) {
              throw new RuntimeException();
          }
          byte[] decodedBytes = bos.toByteArray();
          try {
              bos.close();
              bos = null;
          } catch (IOException ex) {
              System.err.println("Error while decoding BASE64: " + ex.toString());
          }
          return decodedBytes;
    }
    
    
    public static void uploadFile(byte[] file, String filePath, String fileName) throws Exception {
    	File targetFile = new File(filePath);
    	if (!targetFile.exists()) {
    		targetFile.mkdirs();
    	}
    	FileOutputStream out = new FileOutputStream(filePath +"/"+ fileName);
    	out.write(file);
    	out.flush();
    	out.close();
    }
    
    1. 特别说明一下,上面的cleanPastedHTML方法,引用了这篇博客中的方法。声明感谢!
    展开全文
  • 一种是servlet形式,但是用起来session取值有缺点,另一种是springmvc的形式,以及几种其他的应用模板,里面没有spring的包,直接拿过来用就可以,主要是批量上传图片,以及删除图片,和编辑图片等页面,add.jsp ...
  • jsp做的图片上传和图形编辑

    热门讨论 2010-05-21 16:32:17
    jsp做的图片上传和图形编辑器 struts做的
  • 最近开发的项目使用到WebUploader作为图片上传组件,封装了图片上传的所有基本操作,且使用PhotoSwipe实现图片预览功能。 1.准备工作 下载项目Github地址:https://github.com/tysxquan/suploader 使用demo目录下的...
  • 图片上传编辑

    2013-02-20 09:39:01
    主要演示单张或多张图片上传以及对图片大小进行剪切操作
  • java+ jsp+js 实现富文本编辑和上传图片功能

    java+ jsp+js 实现富文本编辑和上传图片功能

    jsp中的引入相关的css js文件

    <!---引入kindeditor的样式文件-->
        <link rel="stylesheet" href="../kindeditor/plugins/code/prettify.css" />
        <link rel="stylesheet" href="../kindeditor/themes/default/default.css" />
    
     <%--富文本编辑 js文件--%>
        <script charset="utf-8" src="../kindeditor/kindeditor-all.js"></script>
        <script charset="utf-8" src="../kindeditor/kindeditor-all-min.js"></script>
        <script charset="utf-8" src="../kindeditor/lang/zh-CN.js"></script>
        <script charset="utf-8" src="../kindeditor/plugins/code/prettify.js"></script>
    

    js代码块

             var KE;
                KindEditor.ready(function(K) {
                    KE = K.create("textarea[id='editor']", {
                        allowUpload : true,
                        urlType : 'domain',//relative为相对路径,absolute为绝对路径,domain为带域名的绝对路径
    //                  allowFileManager:true, //允许对上传图片进行管理
                        allowPreviewEmoticons : false,//
                        allowFileManager : true, //浏览图片空间
                        allowImageUpload: true, //多图上传。允许上传图片
                        imageTabIndex : 1, //点击上传图片按钮默认显示标签,1为本地上传,默认为0网络图片
                        allowImageRemote: false,//指定不能网络图片
                        filterMode : false, //HTML特殊代码过滤,不会过滤HTML代码
                        resizeType : 1,  //文本框不可拖动
                        cssPath :项目路径+'/kindeditor/plugins/code/prettify.css',
                        uploadJson :项目路径+'/fileouterupload/fileUpload.do',//上传图片到Java逻辑地址
                    afterCreate : function() {
                    this.sync();
                 },
                 afterBlur : function() {
                       this.sync();
                   },
                        afterBlur: function(){ this.sync(); }, //编辑器失去焦点(blur)时执行的回调函数(将编辑器的HTML数据同步到textarea)
                    //    afterUpload : function(url, data, name) { //上传文件后执行的回调函数,必须为3个参数
                    //        if(name=="image" || name=="multiimage"){ //单个和批量上传图片时
                    //            if(K("#pic").length>0){ //文本框存在
                    //                document.getElementById('piclist').options[document.getElementById('piclist').length]=new Option(url,url); //下拉列表框增加一条
                    //                document.getElementById('piclist').selectedIndex+=1; //选定刚新增的这一条
                    //                K("#indexpicimg").html("<img src='" + url + "' width='100px' height='100px' />"); //重置图片展示区DIV的HTML内容
                    //                K("#pic").val(url); //重置文本框值
                    //        }
                    //    }
                    //},
                });
                    //KE.get
                prettyPrint();
            });
    

    java逻辑代码

    
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    import org.apache.commons.io.FileUtils;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.multipart.MultipartFile;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.File;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.text.SimpleDateFormat;
    import java.util.*;
    
    /**
     * kindeditor编辑器控制部分
     */
    @Controller
    @RequestMapping("/fileouterupload")
    public class FileManageActionController extends BaseAction
    {
        // windows
        private String PATH_LINEs = "\\";
        // linux
        private String PATH_LINE = "/";
    
        /**
         * 文件上传
         * @param request {@link HttpServletRequest}
         * @param response {@link HttpServletResponse}
         * @return json response
         */
        @SuppressWarnings("unchecked")
        @RequestMapping(value = "/fileUpload", method = RequestMethod.POST)
        @ResponseBody
        public void fileUpload(HttpServletRequest request, HttpServletResponse response,@RequestParam(value = "imgFile", required = false) MultipartFile[] imgFile ) {
            try {
                response.setCharacterEncoding("utf-8");
                PrintWriter out = response.getWriter();
                 //文件保存本地目录路径
                    String savePath = MapCacheManager.getInstance().getMapCache().get("serverPathUp");
                    String serverPicPath = savePath + "/" + "pic"+ "/";
                //文件保存目录URL
                    String saveUrls =MapCacheManager.getInstance().getMapCache().get("serverPaths");
                    String saveUrlPath = saveUrls + "/" + "upload"+ "/";
                    if(!ServletFileUpload.isMultipartContent(request)){
                    out.print(getError("请选择文件。"));
                    out.close();
                    return;
                }
                //检查目录
                File uploadDir = new File(serverPicPath);
                if(!uploadDir.isDirectory()){
                    out.print(getError("上传目录不存在。"));
                    out.close();
                    return;
                }
                //检查目录写权限
                if(!uploadDir.canWrite()){
                    out.print(getError("上传目录没有写权限。"));
                    out.close();
                    return;
                }
    
                String dirName = request.getParameter("dir");
                if (dirName == null) {
                    dirName = "image";
                }
    
                //定义允许上传的文件扩展名
                Map<String, String> extMap = new HashMap<String, String>();
                extMap.put("image", "gif,jpg,jpeg,png,bmp");
                extMap.put("flash", "swf,flv");
                extMap.put("media", "swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb");
                extMap.put("file", "doc,docx,xls,xlsx,ppt,htm,html,xml,txt,zip,rar,gz,bz2");
    
                if(!extMap.containsKey(dirName)){
                    out.print(getError("目录名不正确。"));
                    out.close();
                    return;
                }
                //创建文件夹
                serverPicPath += dirName + PATH_LINE;
               saveUrlPath+= dirName + PATH_LINE;
                File saveDirFile = new File(serverPicPath);
                if (!saveDirFile.exists()) {
                    saveDirFile.mkdirs();
                }
                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
                String ymd = sdf.format(new Date());
                serverPicPath += ymd + PATH_LINE;
               saveUrlPath += ymd + PATH_LINE;
                File dirFile = new File(serverPicPath);
                if (!dirFile.exists()) {
                    dirFile.mkdirs();
                }
    
                //最大文件大小
                long maxSize = 1000000;
    
                // 保存文件
                for(MultipartFile iFile : imgFile){
                    String fileName = iFile.getOriginalFilename();
    
                    //检查文件大小
                    if(iFile.getSize() > maxSize){
                        out.print(getError("上传文件大小超过限制。"));
                        out.close();
                        return;
                    }
                    //检查扩展名
                    String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
                    if(!Arrays.<String>asList(extMap.get(dirName).split(",")).contains(fileExt)){
                        out.print(getError("上传文件扩展名是不允许的扩展名。\n只允许" + extMap.get(dirName) + "格式。"));
                        out.close();
                        return;
                    }
    
                    SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
                    String newFileName = df.format(new Date()) + "_" + new Random().nextInt(1000) + "." + fileExt;
                    try{
                        File uploadedFile = new File(serverPicPath, newFileName);
                    }catch(Exception e){
                        out.print(getError("上传文件失败。"));
                        out.close();
                        return;
                    }
                    System.out.println(saveUrlPath+newFileName);
                    JSONObject obj = new JSONObject();
                    obj.put("error", 0);
                    obj.put("url", saveUrlPath + newFileName);
                    System.out.println(newFileName+"上传的图片");
                    out.print(obj.toJSONString());
                    out.close();
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
        private Map<String, Object> getError(String errorMsg) {
            Map<String, Object> errorMap = new HashMap<String, Object>();
            errorMap.put("error", 1);
            errorMap.put("message", errorMsg);
            return errorMap;
        }
    }

    图片保存路径配置

    serverPathUp=/opt/data/html/upload/(访问路径)
    serverPaths=http://ip地址:端口号
    

    展开全文
  • js上传编辑图片

    2014-05-05 11:47:05
    目前很多网站都允许用户上传自己的图像,而编辑工具多为flash来实现,而我用javascript来实现,功能包括预览、缩放以及拖动等。前段用 html,css加js,后端使用ImageMagicK来进行图片处理,为了方便运行deom程序,...
  • php头像上传图片编辑

    2015-05-19 20:46:43
    PHP头像上传,能剪切头像,支持拍照上传编辑
  • 经过测试,完美支持百度编辑器先调用图片目录,点击图片目录进入指定目录列出该目录下的图片
  • vue上传图片组件编写

    万次阅读 热门讨论 2017-07-25 17:43:11
    编写一个vue上传图片组件: 1.首先得有一个[type=file]文件标签并且隐藏,changge事件来获取图片: 2.触发隐藏的文件标签:(通过原生的click来触发) document.getElementById('upload_file').click()3.获取file...

    点击打开源码 https://github.com/317482454/vue_upload

    在线查看地址:http://jqvue.com/demo/vue_upload/demo.html

    编写一个vue上传图片组件:

    1.首先得有一个[type=file]文件标签并且隐藏,changge事件来获取图片:

        <input @change="fileChange($event)" type="file" id="upload_file" multiple style="display: none"/>

    2.触发隐藏的文件标签:(通过原生的click来触发)

      document.getElementById('upload_file').click()
    3.获取file文件里面的值方法:fileChange($event)

      fileChange(el){
          if (!el.target.files[0].size) return;//判断是否有文件数量
          this.fileList(el.target.files);//获取files文件组传入处理
          el.target.value = ''//清空val值,以便可以重复添加一张图片
        }
    4.处理files文件组

    获取传入单个图片文件

     fileList(files){
          for (let i = 0; i < files.length; i++) {
            this.fileAdd(files[i]);
          }
        }
    处理获取到的图片文件,统计文件大小,转图片为base64以供显示

     fileAdd(file){
          this.size = this.size + file.size;//总大小
          let reader = new FileReader();
          reader.vue = this;
          reader.readAsDataURL(file);
          reader.onload = function () {
            file.src = this.result;
            this.vue.imgList.push({
              file
            });
          }
        },
    

    5.文件大小换算

       bytesToSize(bytes){
          if (bytes === 0) return '0 B';
          let k = 1000, // or 1024
            sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
            i = Math.floor(Math.log(bytes) / Math.log(k));
          return (bytes / Math.pow(k, i)).toPrecision(3) + ' ' + sizes[i];
        },

    6.拖拽上传

    <div class="upload_warp_right" @drop="drop($event)" @dragenter="dragenter($event)" @dragover="dragover($event)">
         或者将文件拖到此处
    </div>
      dragenter(el){
          el.stopPropagation();
          el.preventDefault();
        },
        dragover(el){
          el.stopPropagation();
          el.preventDefault();
        },
        drop(el){
          el.stopPropagation();
          el.preventDefault();
          this.fileList(el.dataTransfer.files);
        }

    最终效果如下:


    展开全文
  • 百度编辑图片上传

    2017-08-08 11:32:11
    配置百度编辑器单图片上传 以及多图片上传 开发环境idea
  • HTML5图片编辑上传控件
  • UEditor编辑上传图片后,怎么获取上传图片的URL并插入下拉框中?以便让管理员选择其中之一作为文章列表标题图片?
  • SpringBoot+Editormd实现markdown文本编辑和图片上传

    千次阅读 热门讨论 2018-01-18 08:18:00
      富文本编辑是开发过程中常用的功能之一,而markdown是开发人员最亲睐的编辑格式,此刻,我也正在使用CSDN的markdown编辑器进行编辑。刚好有了一些想法,所以实现了这个功能。 Markdown文本编辑功能实现 ...

      富文本编辑是开发过程中常用的功能之一,而markdown是开发人员最亲睐的编辑格式,此刻,我也正在使用CSDN的markdown编辑器进行编辑。刚好有了一些想法,所以实现了这个功能。

    Markdown文本编辑功能实现

    Editormd项目地址,Editormd的基本实现非常简单,只需要在html中引入必要的css文件(此处使用了thymeleaf)

        <meta charset="utf-8"/>
        <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
        <meta name="viewport" content="width=device-width, initial-scale=1"/>
        <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
        <title>Edit</title>
        <link rel="stylesheet" th:href="@{/css/style.css}"
              href="/css/style.css"/>
        <link rel="stylesheet" th:href="@{/editormd/css/editormd.css}"
              href="/editormd/css/editormd.css"/>
        <link rel="shortcut icon" href="https://pandao.github.io/editor.md/favicon.ico" type="image/x-icon"/>

    在html中写上两个带有明确class:editormd-markdown-textarea和editormd-html-textarea的标签

    <div class="editormd" id="test-editormd">
        <textarea class="editormd-markdown-textarea" name="test-editormd-markdown-doc" id="content"></textarea>
        <!-- 第二个隐藏文本域,用来构造生成的HTML代码,方便表单POST提交,这里的name可以任意取,后台接受时以这个name键为准 -->
        <textarea class="editormd-html-textarea" name="editormd-html-textarea" id="htmlContent"></textarea>
    </div>

    最后我们进行引入js后进行初始化操作即可

    <script th:src="@{/js/jquery.min.js}" src="/js/jquery.min.js"></script>
    <script th:src="@{/editormd/js/editormd.js}" src="/editormd/js/editormd.js"></script>
    <script type="text/javascript">
        $(function() {
            editormd("test-editormd", {
                width   : "90%",
                height  : 640,
                syncScrolling : "single",
                //你的lib目录的路径,我这边用JSP做测试的
                tocm : true, // Using [TOCM]
                tex : true, // 开启科学公式TeX语言支持,默认关闭
                flowChart : true, // 开启流程图支持,默认关闭
                path    : "/editormd/lib/",
                //这个配置在simple.html中并没有,但是为了能够提交表单,使用这个配置可以让构造出来的HTML代码直接在第二个隐藏的textarea域中,方便post提交表单。
                saveHTMLToTextarea : true
            });
        });

    此时我们在后台中写添加

        @RequestMapping("edit")
        public String   editor(){
            return "edit";
        }

    可见如下效果
    这里写图片描述

    当我们添加基本的java对象并且在html中添加按钮之后我们就可以将数据传递到后台了。

     @Id // 主键
        @GeneratedValue(strategy = GenerationType.IDENTITY) // 自增长策略
        private Long id; // 用户的唯一标识
    
        //@NotEmpty(message = "标题不能为空")
        @Column(nullable = false, length = 50) // 映射为字段,值不能为空
        private String title;
    
       //@NotEmpty(message = "摘要不能为空")
        @Column(nullable = false) // 映射为字段,值不能为空
        private String summary;
    
        @Lob  // 大对象,映射 MySQL 的 Long Text 类型
    
        //@NotEmpty(message = "内容不能为空")
        @Column(nullable = false) // 映射为字段,值不能为空
        private String content;
        @Lob  // 大对象,映射 MySQL 的 Long Text 类型
        //@NotEmpty(message = "内容不能为空")
        @Column(nullable = false) // 映射为字段,值不能为空
        private String htmlContent; // 将 md 转为 html
        public Long getId() {
            return id;
        }
        //省略get,set方法

    js中添加

         $("#submitBtn").click(
                function () {
                    alert("点击按钮了");
                    submitblog();
                }
            )
            function submitblog() {
                var  title = $("#title").val();
                var content = $("#content").val();
                var htmlContent = $("#htmlContent").val();
                $.ajax({
                    url: "submit",
                    data: {title: title, content:content,htmlContent:htmlContent},
                    success:function () {
                        alert("发布成功");
                    },
                    error:function () {
                        alert("发布失败");
                    }
                })
            }

    Controller中添加接受方法

        @RequestMapping("submit")
        @ResponseBody
        public void    submit(Blog blog){
            System.out.println(blog.getContent());
            System.out.println(blog.getHtmlContent());
            blogRepository.save(blog);
        }

    即可保存

    实现文本上传功能

    前端实现

    Editormd的文本上传功能在前端的实现也非常简单,只需要在前端js初始化的代码中加入

                imageUpload : true,
                imageFormats : [ "jpg", "jpeg", "gif", "png", "bmp", "webp" ],
                imageUploadURL : "/uploadimg",
                onload: function () {
                    //console.log('onload', this);
                    //this.fullscreen();
                    //this.unwatch();
                    //this.watch().fullscreen();
                    this.width("100%");
                    this.height(480);
                    //this.resize("100%", 640);
                }

    onload方法为上传图片的回调方法,可以在这里设置图片的一些属性
    但是实际测试过程中,发现这些属性并没有什么作用,网上也没有对应的例子。因此,这一步需要好好探究

    后端实现

        @RequestMapping(value="/uploadimg")
        public @ResponseBody Map<String,Object> demo(@RequestParam(value = "editormd-image-file", required = false) MultipartFile file, HttpServletRequest request) {
            Map<String,Object> resultMap = new HashMap<String,Object>();
            System.out.println(request.getContextPath());
            String realPath = UPLOADED_FOLDER;
            String fileName = file.getOriginalFilename();
            System.out.println(fileName);
    /*        File targetFile = new File(realPath, fileName);
            if(!targetFile.exists()){
                targetFile.mkdirs();
            }*/
            //保存
            try {
    /*            file.transferTo(targetFile);*/
                byte[] bytes = file.getBytes();
                Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename());
                Files.write(path, bytes);
                resultMap.put("success", 1);
                resultMap.put("message", "上传成功!");
                resultMap.put("url",UPLOADED_FOLDER+fileName);
            } catch (Exception e) {
                resultMap.put("success", 0);
                resultMap.put("message", "上传失败!");
                e.printStackTrace();
            }
            System.out.println(resultMap.get("success"));
            return resultMap;
    
    
        }

    此处有两个需要注意的点

    • 由于SpringBoot自带的Tomcat的原因,导致图片无法上传到项目目录下,自带的Tomcat的临时目录的存取权限有问题,因此此处我们使用了一个指定目录
    • Editormd前端规定了后台必须返回给前端一个map且形式为{“success”:1,message:”上传成功”,”url”:url},这里需要注意一下。
    • 其次,使用简单的file文件写入也许会存在问题,因此,我们这里采用了NIO的写入方式
               byte[] bytes = file.getBytes();
                Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename());
                Files.write(path, bytes);

    代码地址

    展开全文
  • ckeditor整合Spring MVC实现富文本编辑上传图片实例 项目描述 SpringMVC 实现Ckeditor富文本编辑器,上传图片 运行环境 jdk8+tomcat8+mysql+eclipse 项目技术(必填) spring+spring mvc
  • PHPMyWind更换编辑器ckeditor批量上传图片。以demo的方式展示,清晰易懂!整个文件代码可以直接复用,复用性强!
  • ueditor编辑上传图片的显示问题

    千次阅读 2018-12-27 10:23:11
    最近需要做一个标记文章的系统,在网上找到了Ueditor编辑器的代码,修修改改,添加jar包之后已经能运行成功,显示...最后发现图片上传出现问题,就是用户上传图片之后,编辑框里面没有显示图片 但是需求是用户上传...
  • 项目开发需要用到在线编辑和图片上传,最终讨论使用ckeditor,原因就是其丰富的API。考虑到最新版本ckeditor5可能不够稳定,我们选择使用ckedtior4.9.2版本。官网链接:ckeditor官网 特别注意:下面截图中url中的/...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 186,353
精华内容 74,541
关键字:

怎样编辑和上传图片