struts2+ckeditor配置图片上传

又是一个漫漫长夜。

公司的编辑器坏了,用的是百度编辑器,上传图片的网址被框架给拦截了,我们本地怎么测试都没问题,放到服务器就这样了。和老李找了半天,疯了,没原因的。

笔者以前用过jsp+ckeditor,觉得里面上传功能挺好用,于是想出这个法子,把网站的编辑器换掉。

用的是最新的版本的,4点几的。很有wordpress的感觉,不知道是不是一家的。先预览一下:

代码:

package 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 util.DateUtil;

import com.opensymphony.xwork2.ActionSupport;

public class UploadFile  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/upload/"+DateUtil.getDirDate());
            System.out.println("uploadpath:"+uploadPath);
            File dirfile=new File(uploadPath);
            if(!dirfile.exists()){
                     dirfile.mkdirs();
                  }

            String fileName = DateUtil.getDate();  //采用时间+UUID的方式随即命名
            fileName += expandedName;
            System.out.println("filename:"+fileName);
            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/upload/"+ DateUtil.getDirDate() +"/"+ fileName + "‘,‘‘)");
            out.println("</script>");  

            return null;
        }
}

里面用到一个时间的工具类,用于按照时间创建目录和文件名字。文件名字精确到秒,以免发生名称重复。

其中:

out.println("window.parent.CKEDITOR.tools.callFunction(" + callback + ",‘" + "img/upload/"+ DateUtil.getDirDate() +"/"+ fileName + "‘,‘‘)"); 

这一句是上传图片后,返回给编辑器的一个图片路径地址。

时间工具类:

package com.util;

import java.util.Calendar;

public class DateUtil {
    public static String getDate(){
        Calendar calendar=Calendar.getInstance();
        int y=calendar.get(Calendar.YEAR);
        int m=calendar.get(Calendar.MONTH);
        int d=calendar.get(Calendar.DATE);
        int h=calendar.get(Calendar.HOUR);
        int mi=calendar.get(Calendar.MINUTE);
        int s=calendar.get(Calendar.SECOND);
        StringBuffer sb=new StringBuffer("");
        sb.append(y);
        sb.append(m+1);
        sb.append(d);
        sb.append(h);
        sb.append(mi);
        sb.append(s);
        String date=sb.toString();
        return date;
    }

    public static String getDirDate(){
        Calendar calendar=Calendar.getInstance();
        int y=calendar.get(Calendar.YEAR);
        int m=calendar.get(Calendar.MONTH);
        int d=calendar.get(Calendar.DATE);
        StringBuffer sb=new StringBuffer("");
        sb.append(y);
        sb.append(m+1);
        sb.append(d);
        String date=sb.toString();
        return date;
    }

}

其中很有意思的是,上面获取的月份,比当前月份要少一个月,不知道这个是怎么理解(有人说老外是从0开始计算月份的,呵呵),于是加1代表当前月份。

然后在struts.xml中,配置一个action即可,不需要result,返回为null的。

 <action name="uploadfile" class="indexAction" method="uploadfile">
        </action>

哦,既然有action,当然要有请求他的。这个请求是点击上传时候发生的,在config.js配置:

    //个人的配置
    config.filebrowserUploadUrl="/uploadfile.html";

在结束前插入这一句。我这里后面是html,是因为url重写的。默认情况就是上面的action name。

然后就是在各个页面引入编辑器框架。

     <!-- 插入ckeditor  -->
    <textarea rows="70" cols="80" name="content"></textarea>

还要引入以下这个js:

 <script type="text/javascript">CKEDITOR.replace(‘content‘);</script>
<script type="text/javascript">
    window.onload = function()
    {
        CKEDITOR.replace( ‘content‘ );
    };
</script>

最后是在页面头部引入框架的js:

<script type="text/javascript" src="${webroot}/plugins/ckeditor/ckeditor.js"></script>

顺序貌似说反了,大概就是这样。这个真心比百度编辑器好用,整合也简单方便。

struts2+ckeditor配置图片上传

时间: 2024-11-04 10:51:39

struts2+ckeditor配置图片上传的相关文章

ckeditor4.5.1配置图片上传的方法

本篇博文主要面向初学者,一步一步地实现ckeditor的图片上传,欢迎各位大神指正. ckeditor的图片上传默认是关闭的,网上也有很多相关的教程,可是不是讲的不完整,就是版本太旧已经不适用.我写这篇博文主要面向初学者,有错误的地方欢迎指正. 截止本文撰写,ckeditor最新版本是4.5.1,我下载的版本是4.5.1standard,如果本文的方法不管用,请下载同一版本尝试. 1.开启图片上传界面 文件地址:ckeditor/plugins/image/dialogs/image.js 搜索

项目整合ckeditor实现图片上传到远程服务器

最近手头上的一个Java项目需要做一个门户网站,其中有一个模块就是用来发布最新的业界安全动态的模块,因此需要用到后台发布新闻的功能:刚开始的时候在网上搜了一下,大部分都是关于PHP和.NET的,关于Java不多,而且查到的都是说用ckeditor+ckfinder来实现,ckeditor实现文本的编辑,ckfinder实现图片的上传,刚开始我也是准备用ckeditor+ckfinder来实现的,但是后来研究ckfinder的时候不知道如何配置ckfinder的图片上传路径问题,网上可以找到好多例

Django配置图片上传

本文首先实现django中上传图片的过程,然后解决富文本编辑器文件上传的问题. 一. 上传图片 1.在 settings.py 中配置MEDIA_URL  和 MEDIA_ROOT 在 D:\blog_project  下建立文件夹 uploads MEDIA_URL = '/uploads/' # 上传图片的路径:D:\blog_project\uploads MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads') # 上传图片的根路径 BASE_DIR:

Java往事之《百度UEditor插件配置图片上传问题》

百度UEditor插件配置图片上传问题 前言:之前第一次用到UEditor插件的时候,一脸懵逼!没错就是一脸懵逼,去UEditor插件官网下载了一个开发版的.然后对于新鲜技术好奇,本人就迫不及待的把它copy到了我的项目里,运行之后发现鼠标点到输入框里面的时候,什么鬼啊,握了棵草!上传图片的插件置灰了如下图1,一看还有一个多图片上传的插件还在,就赶紧点了一下,点开的那一瞬间我吃了一鲸,如下图2! 图1 图2 很好!下面看一下如何解决这个问题. 1.首先你可以到官网Ueditor,查看很详细的文档

CKEditor实现图片上传

本人用的CKEditor版本为4.3 CKEditor配置和部署参考CKEditor4.x部署和配置. CKEditor编辑器的工具栏中初始的时候应该是这样子的,没有图片上传按钮 并且预览中有一堆火星文,可以修改相应配置删除它. 第一种方法:打开ckeditor/plugins/image/dialogs/image.js文件,搜索“b.config.image_previewText”,(b.config.image_previewText||'')单引号中的内容全删了,注意别删多了.(由于c

CKEditor实现图片上传,并且回调图片路径

CKEditor编辑器的工具栏中初始的时候应该是这样子的,没有图片上传按钮 并且预览中有一堆火星文,可以修改相应配置删除它. 第一种方法:打开ckeditor/plugins/image/dialogs/image.js文件,搜索"b.config.image_previewText",(b.config.image_previewText||'')单引号中的内容全删了,注意别删多了.(由于ckeditor的很多js文件都是压缩过的,格式很难看,很容易删错,所以不推荐此种方法) 第二种

ckeditor4.7配置图片上传

ckeditor作为老牌的优秀在线编辑器,一直受到开发者的青睐. 这里我们讲解下 ckeditor最新版本4.7的图片上传配置. https://ckeditor.com/ 官方 进入下载 https://ckeditor.com/download 我们下载完整版 默认本地上传没有开启: 找到ckeditor/plugins/image/dialogs/image.js文件 打开 然后搜索 id:"Upload",hidden   默认值是!0 我们改成0即可 刷新页面,点击那个上传图

UEditor配置图片上传

最近项目中需要用到一个图文编辑器功能,因为之前的kingeditor功能过于简陋,所以决定换成Ueditor,前端已经配置好了,这个是后台配置 1,确定前台已经配置好了 2,将编辑器的插件包下载下来,将里面文件夹拷到网站的静态资源目录 3,文件夹里面包含一个PHP文件夹,这个里面包含文件上传,后台配置文件,打开config.json文件,需要配置的地方是:"imagePathFormat":"这里写你的上传图片保存路径,一定要是绝对路径" 4,在你引用编辑器的模版中

.net core CKEditor 图片上传

最近在玩 asp.net core,不想用UEditor,想使用CKEditor.故需要图片上传功能. 废话不多说,先上效果图: CKEditor 前端代码: <text id="content" name="content"></text> <script> CKEDITOR.replace('content'); </script> CKeditor config.js 配置代码:需要配置图片上传路径 CKEDIT