ckeditor上传图片

环境:

Struts2框架+ckeditor富文本编辑器 (我用的是ckeditor_4.6.2_full。可以去http://ckeditor.com/download上下,或者https://pan.baidu.com/s/1slsAz4x


step1:

如果是从官网下过来的ckeditor是不可以直接上传图片的,需要进行配置。(百度云上是已经配置好的)

1.找到 ckeditor\plugins\image\dialogs\imge.js ,查找Upload

//上传按钮ckeditor默认是隐藏的,这里让按钮显示出来id:"Upload",hidden:!0  修改为  id:"Upload",hidden:0

2.在ckeditor\config.js中添加请求Action(处理上传图片请求)

CKEDITOR.editorConfig = function( config ){
    //这是处理图片上传的请求
    config.fileborwserUploadUrl="img/imgUpload";
}

step2:

创建项目,配置struts2环境,将ckeditor文件复制到WebRoot中,完整项目如图

img/upload是为了存放上传的图片(上传的图片在服务器端而不在开发环境中,在这里建立文件夹就不用专门去服务器端新建了)

图片实际存放位置 \WorkSpace\.metadata\.me_tcat\webapps\ck\img\upload

textUpload和success.jsp是我用来处理ckeditor整体文章的,这里可以不创建
这里写图片描述

step3:

index.jsp中使用ckeditor

1.导入ckeditor的核心js:

<script src="<%=basePath%>ckeditor/ckeditor.js"></script>

2.引用多行文本框:

<textarea name="editor"></textarea><div id="editor"></div>

3.在文本框下加一句js代码:

<script>CKEDITOR.replace('editor');</script>

js代码作用:将<textarea>控件替换成编辑器的代码。ckeditor.js会按照replace中的值在<div><textarea>中按先name后id属性来查找控件并替换为ckeditor代码。

CKEDITOR.replace中可以对编辑器进行配置,这里就不详写了,有兴趣可以去百度。


step4:

接下来是后台数据的上传处理,包括对上传文件的格式和大小进行限制

1.struts.xml配置

<!-- 建立映射 class中放处理图片的控制层文件地址 -->
<package name="img" namespace="/img" extends="struts-default">
    <action name="imgUpload" class="com.cwj.imgUpload"></action>
</package>

2.imgUpload.java完整代码

package com.cwj.contoller;

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 imgUpload extends ActionSupport{
    private File upload;
    private String uploadContentType;
    private String uploadFileName;

    public String execute() throws Exception{
        HttpServletResponse resp=ServletActionContext.getResponse();
        resp.setCharacterEncoding("utf8");
        PrintWriter out=resp.getWriter();
        //ckeditor提交的参数,与返回有关
        String callback=ServletActionContext.getRequest().getParameter("CKEditorFuncNum");
        //图片格式字典
        String[] imgWordBook={"jpg",".png",".gif",".bmp",".jpeg"};
        //分割文件名
        String[] fileName=uploadFileName.split("\\.");
        //得到文件扩展名
        String expandedName="."+fileName[1];
        //判断是否为图片
        boolean flag=false;
        for(String iwb:imgWordBook){
            if(expandedName.equals(iwb)){
            flag=true;
            }
        }
        if(!flag){
            out.println("<script>");    
            out.println("window.parent.CKEDITOR.tools.callFunction(" + callback + ",''," + "'文件格式不正确(必须为.jpg/.jpeg/.gif/.bmp/.png文件)');");   
            out.println("</script>");  
            return null;
        }
        //判断大小是否符合要求
        if(upload.length()>600*1024){
            out.println("<script>");
            out.println("window.parent.CKEDITOR.tools.callFunction("+callback+",'',"+"'文件大小不得大于600k');");
            out.println("</script>");
            return null;
        }

        //上传文件到服务器

        //输入流 从服务器端临时文件中得到数据
        InputStream is=new FileInputStream(upload);
            //设置存放路径
        String savePath=ServletActionContext.getServletContext().getRealPath("/img/upload");
            //为图片随机取名
        String rName=java.util.UUID.randomUUID().toString();
        rName+=expandedName;
            //在服务端用File类建立文件
        File toFile=new File(savePath,rName);
        //输出流 从临时文件中得到的数据输出到上面File类建立的文件中
        OutputStream os=new FileOutputStream(toFile);
        //每次循环写入1024B=1KB
        byte[] buffer=new byte[1024];
        int length=0;
        //写入过程
        while((length=is.read(buffer))>0){
            os.write(buffer,0,length); 
        }
        //输入、输出流关闭
        is.close();
        os.close();

        //返回URL
        out.println("<script>");
            out.println("window.parent.CKEDITOR.tools.callFunction("+callback+",'img/upload/"+rName+"','')");
        out.println("</script>");   
        return null;
    }

    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;
    }
}

如果上面都成功的话,这时候已经能上传图片了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值