ckeditor4.*配置图片上传详解

文章标签: ckeditor4
2017-8-21 14:09:46     0 人阅读    

    ckeditor作为老牌的优秀在线编辑器,一直受到开发者的青睐,这里我们讲解下 ckeditor最新版本4.7的图片上传配置。 

    本篇博文主要面向初学者,一步一步地实现ckeditor的图片上传,欢迎各位大神指正。

    ckeditor的图片上传默认是关闭的,网上也有很多相关的教程,可是不是讲的不完整,就是版本太旧已经不适用。我写这篇博文主要面向初学者,有错误的地方欢迎指正。

        截止本文撰写,ckeditor最新版本是4.5.1,我下载的版本是4.5.1standard,如果本文的方法不管用,请下载同一版本尝试。

 第一种方法:

     下载

               https://ckeditor.com/ 官方,进入下载 https://ckeditor.com/download

        ckeditor配置图片上传

ckeditor配置图片上传



我们下载完整版


默认本地上传没有开启;


找到ckeditor/plugins/image/dialogs/image.js文件 打开 

然后搜索 id:"Upload",hidden   默认值是!0 我们改成0即可


刷新页面,点击那个上传图片图标,

ckeditor配置图片上传


出现了上传;


然后我们配置下上传后台请求路径

找到ckeditor下的config.js 打开

config.filebrowserUploadUrl="/admin/film/ckeditorUpload";

配置下  

后台处理有个callback参数CKEditorFuncNum我们要接收下 并且要返回

这里我下我项目里的参考实现 用的是java 实现

  

/**
 * 上传图片
 * @param file
 * @return
 */
@ResponseBody
@RequestMapping("/ckeditorUpload")
public String ckeditorUpload(@RequestParam("upload")MultipartFile file,String CKEditorFuncNum)throws Exception{
    // 获取文件名
    String fileName = file.getOriginalFilename();
    // 获取文件的后缀名
    String suffixName = fileName.substring(fileName.lastIndexOf("."));
    String newFileName=DateUtil.getCurrentDateStr()+suffixName;
    FileUtils.copyInputStreamToFile(file.getInputStream(), new File(imageFilePath+newFileName));
     
    StringBuffer sb=new StringBuffer();
    sb.append("<script type=\"text/javascript\">");
    sb.append("window.parent.CKEDITOR.tools.callFunction("+ CKEditorFuncNum + ",'" +"/static/filmImage/"+ newFileName + "','')");
    sb.append("</script>");
     
    return sb.toString();
}



其他细节说明 


1.开启图片上传界面

        文件地址:ckeditor/plugins/image/dialogs/image.js

        搜索"Upload",将

id:"Upload",hidden:!0

改为

id:"Upload",hidden:false

    

2.配置上传图片表单的传送地址

        第一种办法是在ckeditor的config.js里面加入:config.filebrowserUploadUrl = ‘传送地址‘,这里不推荐使用这种方法,这样配置不方便,因为我们表单的传送地址一般是动态生成,直接在js文件里面写入静态的地址不利于维护。

        这里采用这种方法,首先打开文件ckeditor/ckeditor.js,把

f=a.config.filebrowserUploadUrl

改为

f=filebrowserUploadUrl

        接着在html页面引入ckeditor.js之前声明变量filebrowserUploadUrl并赋值。例如:把

<script type="text/javascript" src="__PUBLIC__/ckeditor/ckeditor.js"></script>


改为

<script type="text/javascript">
    var filebrowserUploadUrl = ‘传送地址‘;
</script>
<script type="text/javascript" src="__PUBLIC__/ckeditor/ckeditor.js"></script>


3.配置:上传图片后自动加入编辑器中

用firebug查看url文本域和确定按钮的id:


        这里url文本域的id是:cke_76_textInput,确定按钮的id是:cke_124_label。(不同版本id不一样,需要自己查看,再次说明,小编使用的是ckeditor4.5.2_standard,如果是相同版本,可以直接使用本文提供的id)。

        接下来在html页面加入一段简单的jquery代码:

<script type="text/javascript">
function ckeditorUploads(file){
   $(‘#cke_75_textInput‘).val(file);
   $(‘#cke_124_label‘).click();
}
</script>

        然后在表单处理文件(如php)加入,$file为图片的url地址

echo ‘<script>parent.ckeditorUpload("‘.$file.‘");</script>‘;

        这里使用parent对象是因为ckeditor上传使用的是了一个空的iframe来实现异步上传,所以必须使用parent对象才能操作页面的DOM。

            

果还有错误请考虑以下几个方面:

  1. 传送地址是否正确

  2. 表单处理文件是否成功上传图片到服务器

  3. 返回的图片url是否正确

  4. url文本域和确定按钮的id是否正确

java struts2的完整代码

          

package com.xxg.bbs.action;  
  
import java.io.File;  
import java.io.FileInputStream;  
import java.io.FileOutputStream;  
import java.io.InputStream;  
import java.io.OutputStream;  
import java.io.PrintWriter;  
  
import javax.servlet.http.HttpServletResponse;  
  
import org.apache.struts2.ServletActionContext;  
  
import com.opensymphony.xwork2.ActionSupport;  
  
public class CkeditorUpload extends ActionSupport {  
  
    private File upload;  
    private String uploadContentType;  
    private String uploadFileName;  
  
  
    public File getUpload() {  
        return upload;  
    }  
  
    public void setUpload(File upload) {  
          
        this.upload = upload;  
    }  
  
    public String getUploadContentType() {  
        return uploadContentType;  
    }  
  
    public void setUploadContentType(String uploadContentType) {  
        this.uploadContentType = uploadContentType;  
    }  
  
    public String getUploadFileName() {  
        return uploadFileName;  
    }  
  
    public void setUploadFileName(String uploadFileName) {  
        this.uploadFileName = uploadFileName;  
    }  
  
    public String execute() throws Exception {  
  
        HttpServletResponse response = ServletActionContext.getResponse();  
        response.setCharacterEncoding("GBK");  
        PrintWriter out = response.getWriter();  
  
        // CKEditor提交的很重要的一个参数  
        String callback = ServletActionContext.getRequest().getParameter("CKEditorFuncNum");   
          
        String expandedName = "";  //文件扩展名  
        if (uploadContentType.equals("image/pjpeg") || uploadContentType.equals("image/jpeg")) {  
            //IE6上传jpg图片的headimageContentType是image/pjpeg,而IE9以及火狐上传的jpg图片是image/jpeg  
            expandedName = ".jpg";  
        }else if(uploadContentType.equals("image/png") || uploadContentType.equals("image/x-png")){  
            //IE6上传的png图片的headimageContentType是"image/x-png"  
            expandedName = ".png";  
        }else if(uploadContentType.equals("image/gif")){  
            expandedName = ".gif";  
        }else if(uploadContentType.equals("image/bmp")){  
            expandedName = ".bmp";  
        }else{  
            out.println("<script type=\"text/javascript\">");    
            out.println("window.parent.CKEDITOR.tools.callFunction(" + callback + ",''," + "'文件格式不正确(必须为.jpg/.gif/.bmp/.png文件)');");   
            out.println("</script>");  
            return null;  
        }  
          
        if(upload.length() > 600*1024){  
            out.println("<script type=\"text/javascript\">");    
            out.println("window.parent.CKEDITOR.tools.callFunction(" + callback + ",''," + "'文件大小不得大于600k');");   
            out.println("</script>");  
            return null;  
        }  
          
          
        InputStream is = new FileInputStream(upload);  
        String uploadPath = ServletActionContext.getServletContext()     
                .getRealPath("/img/postImg");  
        String fileName = java.util.UUID.randomUUID().toString();  //采用时间+UUID的方式随即命名  
        fileName += expandedName;  
        File toFile = new File(uploadPath, fileName);  
        OutputStream os = new FileOutputStream(toFile);     
        byte[] buffer = new byte[1024];     
        int length = 0;  
        while ((length = is.read(buffer)) > 0) {     
            os.write(buffer, 0, length);     
        }     
        is.close();  
        os.close();  
          
        // 返回“图像”选项卡并显示图片  
        out.println("<script type=\"text/javascript\">");    
        out.println("window.parent.CKEDITOR.tools.callFunction(" + callback + ",'" + "img/postImg/" + fileName + "','')");    
        out.println("</script>");  
          
        return null;  
    }  
}  


原文地址:http://www.itmmd.com/201708/816.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

  上一篇
下一篇  tomcat启动报错 Multiple Contexts have a path of /test的解决办法

精彩回复
发表评论
姓名: