不久前以形容一个谈得来之后台管理体系(主要是写着玩的,用来熟悉后端java的学识,目前独自是碰头略的写点接口),想在类型受到编辑一个发布新闻文章的法力,想到了应用百度的ueditor富文本编辑器,网上查找了诸多java版本的资料,不过多数都是内外端都在一个工程项目下,页面是jsp的。由于自家这个系统是管前后端拆分开成前后端分离之。所以当根据看了网上的资料与日益的索下,实现了当左右端分离之状况下将ueditor集成到网受到。项目页面如图:

 

图片 1

证明:由于ueditor的上传文件的效益默认是上传在档次工目录下的,而己这边是拿公文上传另外一个Tomcat服务器下之,所以自己好独立写了一个臻传接口,并且还要修改config.json文件。 

 

今为了记录ueditor的以,我在此处将关于ueditor这无异于块独立将出去,写了一个概括的小demo,下面记录过程,如发不足之处,敬请提出。

1、下载ueditor

打开http://ueditor.baidu.com/website/download.html#ueditor

亟需下载两只压缩包

1、下载完整源码,并解压

2、下载jsp版本【UTF-8】,并解压

   源码版本是为使其中的java文件,而后来发现在源码版本中没ueditor.all.min.js文件,而在前端是用引入这js文件的,所以用还把jsp版本下载下来,该本中起欠js文件。

图片 2      
图片 3

 

2、java后令片

 2.1、config.json文件

当java项目的 src/main/webapp
目录下新建一个conf目录,然后于解压后的源码版本被的 jsp
目录下找到config.json文件,把它们复制到新建的conf目录下,并召开修改。

该公文是因此来配置ueditor编辑器的上传文件之功能的各种参数的。

 图片 4

图片 5

个中,imageActionName属性的取值“uploadimage”要切记,后续上传接口中只要为此到

 

2.2、把源码版本被的 jsp/src/com 目录下的 baidu 这个文件夹拷贝到品种com.lin包下

  拷贝后,里面java文件肯定会报错,只需要修改各个java文件之package包路径和援其他文件之门道即可。

图片 6

 

 另外由于在达到同一步着,把config.json文件放置到了src/main/webapp/conf目录下,而于ConfigManager类中要读取该json文件的情,所以待以ConfigManager.java文件中修改少量代码,大于在170基本上推行,修改如下:

图片 7

 

2.3、项目常量配置-config.properties

#host地址
host=http://172.16.4.160:8081/ssm_project
#文件上传服务器地址(ip+端口)
uploadHost=http://172.16.4.160:8090/
#普通图片上传保存目录
imagePath = file/image/
#系统用户头像上传保存目录
headImgPath = file/image/headImg/
#系统用户默认头像
sysUserDefImg = sysUser-default.jpg
#文本文件上传保存目录
documentPath = file/document/
#音频文件上传保存目录
soundPath = file/sound/
#视频文件上传保存目录
videoPath = file/video/
#ueditor编辑器上传文件保存目录(包括图片、视频、音频、文本等文件)
ueditor = file/ueditor/

2.4、新建及传工具类-Upload.java

该公文其实以我11月2声泪俱下的博客——前后端分离跨服务器文件上传-Java SpringMVC版
中就产生,为了有利于了解,这里还把代码贴出来。

package com.lin.utils;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.FilenameUtils;
import org.springframework.web.multipart.MultipartFile;

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;


/**
 * 上传文件工具类
 * @author libo
 */
public class Upload {

    /**
     * 上传文件
     * @param request
     * @param response
     * @param serverPath    服务器地址:(http://172.16.5.102:8090/)
     * @param path             文件路径(不包含服务器地址:upload/)
     * @return
     */
    public static String upload(Client client, MultipartFile file, HttpServletRequest request,HttpServletResponse response, String serverPath, String path){
        // 文件名称生成策略(日期时间+uuid )
        UUID uuid = UUID.randomUUID();
        Date d = new Date();
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
        String formatDate = format.format(d);
        // 获取文件的扩展名
        String extension = FilenameUtils.getExtension(file.getOriginalFilename());
        // 文件名
        String fileName = formatDate + "-" + uuid + "." + extension;
        //相对路径
        String relaPath = path + fileName;

        String a = serverPath + path.substring(0, path.lastIndexOf("/"));
        File file2 = new File(a);
        if(!file2.exists()){
            boolean mkdirs = file2.mkdirs();
            System.out.println(mkdirs);
        }

        // 另一台tomcat的URL(真实路径)
        String realPath = serverPath + relaPath;
        // 设置请求路径
        WebResource resource = client.resource(realPath);

        // 发送开始post get put(基于put提交)
        try {
            resource.put(String.class, file.getBytes());
            return fileName+";"+relaPath+";"+realPath;
        } catch (IOException e) {
            e.printStackTrace();
            return "";
        }
    }

}

 

2.5、新建UEditorController.java文件,编写上传接口

package com.lin.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.factory.annotation.Value;
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.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

import com.lin.baidu.ueditor.ActionEnter;
import com.lin.utils.ResponseUtils;
import com.lin.utils.Upload;
import com.sun.jersey.api.client.Client;

import net.sf.json.JSONObject;
/**
 * baidu-ueditor
 * @author libo
 */
@Controller
@RequestMapping("/ueditor")
public class UEditorController {
    @Value(value="${ueditor}")    //后台图片保存地址
    private String ueditor;

    @Value(value="${uploadHost}")
    private String uploadHost;    //项目host路径    

    /**
     * ueditor文件上传(上传到外部服务器)
     * @param request
     * @param response
     * @param action
     */
    @ResponseBody
    @RequestMapping(value="/ueditorUpload.do", method={RequestMethod.GET, RequestMethod.POST})
    public void editorUpload(HttpServletRequest request, HttpServletResponse response, String action) {
        response.setContentType("application/json");
        String rootPath = request.getSession().getServletContext().getRealPath("/");

        try {
            if("config".equals(action)){    //如果是初始化
                String exec = new ActionEnter(request, rootPath).exec();
                PrintWriter writer = response.getWriter();
                writer.write(exec);
                writer.flush();
                writer.close();
            }else if("uploadimage".equals(action) || "uploadvideo".equals(action) || "uploadfile".equals(action)){    //如果是上传图片、视频、和其他文件
                try {
                    MultipartResolver resolver = new CommonsMultipartResolver(request.getSession().getServletContext());
                    MultipartHttpServletRequest Murequest = resolver.resolveMultipart(request);       
                    Map<String, MultipartFile> files = Murequest.getFileMap();//得到文件map对象
                    // 实例化一个jersey
                    Client client = new Client();

                    for(MultipartFile pic: files.values()){
                        JSONObject jo = new JSONObject();
                        long size = pic.getSize();    //文件大小
                        String originalFilename = pic.getOriginalFilename();  //原来的文件名
                        String uploadInfo = Upload.upload(client, pic, request, response, uploadHost, ueditor);
                        if(!"".equals(uploadInfo)){    //如果上传成功
                            String[] infoList = uploadInfo.split(";");
                            jo.put("state", "SUCCESS");
                            jo.put("original", originalFilename);
                            jo.put("size", size);
                            jo.put("title", infoList[1]);
                            jo.put("type", FilenameUtils.getExtension(pic.getOriginalFilename()));
                            jo.put("url", infoList[2]);
                        }else{    //如果上传失败
                        }
                        ResponseUtils.renderJson(response, jo.toString());
                    }
                }catch (Exception e) {
                    e.printStackTrace();
                }
            }
        } catch (Exception e) {
        }
    }
}

其中:

if("config".equals(action)){ 
这段代码是用来判断是否是初始化上传的,因为在点击多图上传弹出上传窗口的时候,是会请求这个接口,经测试,如果没有该段判断,前端的上传是无法使用的。

   else if(“uploadimage”.equals(action)
|| “uploadvideo”.equals(action) || “uploadfile”.equals(action)){ 

   这无异于部分代码判断中,
uploadimage,uploadvideo,uploadfile
这三只价,都是来自于conf.json文件被的配置,因此这一个接口既好上传图片,也堪上传其他门类文件。

  
另外接口返回的json字段,也是固定的。

 

3、前端部分

3.1、demo目录结构

 图片 8

于ueditor-demo目录下新建lib目录,然后打前面解压的jsp版本被,把dialogs、lang、themes、third-party四单文本夹和ueditor.all.min.js、ueditor.config.js、ueditor.parse.js、ueditor.parse.min.js四独js文件复制到lib目录下,并补充加jQuery(用来推行ajax提交数据)

3.2、文件修改

1、修改ueditor.config.js

改服务器统一请求接口路径 –
serverUrl属性的价值修改为后台上污染文书之接口地址

图片 9

 

2、修改dialogs/image/image.js、dialogs/video/video.js、dialogs/attachment/attachment.js三只文件

 这三单文件分别针对许图片上传、视频及污染、附件上传,主要是若错过丢默认设置的恳求求头(可以一直在即时三个js文件被删掉该段代码),否则无法达到污染文书

   2.1、dialogs/image/image.js大概在706行

        图片 10

   2.2、dialogs/video/video.js大概在719行

        图片 11

   2.3、dialogs/attachment/attachment.js大概在488行

        图片 12

 

3.3、index.html

于页面被需引入ueditor.config.js、ueditor.all.min.js和zh-cn.js

以body元素中描绘一个script元素,给一个id,这里吧editor,并安装type=”text/plain”,这个id主要是经过它们来初始化ueditor实例的。

初始化的不二法门是于经过 UE.getEditor(‘script标签id’,
{})。

此处来三三两两单参数,第一单参数是script标签的id值,第二独参数是一个对象,可以就此来装ueditor编辑框的有余高等属性,这里仅设置了丰厚高。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ueditor-demo</title>
    <script src="/lib/jquery.min.js"></script>
    <script src="/lib/ueditor/ueditor.config.js"></script>
    <script src="/lib/ueditor/ueditor.all.min.js"></script>
    <script src="/lib/ueditor/lang/zh-cn/zh-cn.js"></script>
    <style>
        #submit {
            width: 100px;
            height: 30px;
            line-height: 30px;
            font-size: 16px;
        }
    </style>
</head>
<body>
<h2>ueditor测试使用</h2>
<script id="editor" type="text/plain"></script>
<div style="margin-top: 20px; text-align: center;">
    <input type="button" class="btn btn-blue w-100" value="提 交" id="submit">
</div>

<script>

    $(function () {
        //实例化编辑器
        var ue = UE.getEditor('editor',{
            initialFrameWidth:"100%",   //初始化宽度
            initialFrameHeight:400,     //初始化高度
        });

        $('#submit').click(function () {
            //获取ueditor编辑框中的html文本内容
            var content = UE.getEditor('editor').getContent();
            $.ajax({
                url: 'http://172.16.4.160:8081/ssm_project/news/addNews.do',
                type: 'POST',
                data: {
                    content: content,
                },
                dataType: 'json',
                success: function (res) {
                    console.log(res);
                },
                error: function () {
                    console.log(res);
                }
            })
        })
    })

</script>
</body>

</html>

UE.getEditor(‘editor’).getContent()方法就好拿走到编辑框中之html文本,然后调用添加接口,就可以将html格式的文书保存至数据库被了。

此时即使好在服务环境下访该index.html页面,即可看到ueditor富文本编辑框,并展开上传文件并保存到数据库中。

 

4、效果

图片 13

 

图片 14

 

 图片 15

专注:在测试之前,需要先启动文件服务器——另外一个Tomcat服务器
,至于有关这无异于片的介绍,请参见11月2哀号的均等篇博客:前后端分离跨服务器文件上传-Java
SpringMVC版

 

备注:由于此地是左右端分离的,涉及到跨域的题目,所以啊以网上也查阅了过多素材,自己也尝试了森破,都没法实现单图上传,因此这里虽以ueditor.config.js中,把单图上污染被错过丢了。

由于自己是开web前端开发的,只是近年来以模拟学java,因此类或者demo中还出多不足之处。如一旦大家来建议,欢迎在评论区提出。

 

相关文章

网站地图xml地图