Spring+Vue整合UEditor富文本实现图片附件上传的方法

下载UEditor

https://ueditor.baidu.com/website/download.html

下载完整源码和JSP版本

Spring后端集成

1. 解压完整源码,拷贝jsp目录下的java源码,到spring mvc后端

jsp目录下java源码

集成spring mvc后端

2. 配置config.json

  • 解压JSP版本
  • 拷贝jsp目录下config.json

放到java项目的resource目录下,在这里是ueditorConfig.json

配置config.json文件名称,这里是ueditorConfig.json

3. 项目常量配置文件新建upload.properties,也放在resouce目录下,文件内容如下:

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

将upload.properties添加到Spring启动配置文件application.xml中,以便后面Controller访问

<!-- 引入数据库配置文件 -->
<bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
  <property name="locations">
    <list>
      <value>classpath:config.properties</value>
      <value>classpath:redis.properties</value>
      <value>classpath:upload.properties</value>
    </list>
  </property>
</bean>

4. 编写工具类UploadUtil.java

package cn.lega.common.util;

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import org.apache.commons.io.FilenameUtils;
import org.springframework.util.FileCopyUtils;
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.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

public class UploadUtil {
  /**
   * 上传文件
   *
   * @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 "";
//    }

    // 用户目录/root/fileUpload/ueditor
    String userDir = System.getProperty("user.home");
    String ueditorUploadPath = userDir + File.separator + path;
    File file2 = new File(ueditorUploadPath);
    if (!file2.exists()) {
      file2.mkdirs();
    }
    String newFilePath = ueditorUploadPath + fileName;

    // 保存在本地
    File file3 = new File(newFilePath);
    try {
      FileCopyUtils.copy(file.getBytes(), file3);
      return fileName + ";" + relaPath + ";" + realPath;
    } catch (IOException e) {
      e.printStackTrace();
      return "";
    }
  }

  public static String delete(String filePath) {
    try {
      Client client = new Client();
      WebResource resource = client.resource(filePath);
      resource.delete();
      return "y";
    } catch (Exception e) {
      e.printStackTrace();
      return "n";
    }
  }
}

5. 编写Controller类UeditorController.java,为前端提供上传接口

package cn.lega.common.controller;

import cn.lega.common.baidu.ueditor.ActionEnter;
import cn.lega.common.util.ResponseUtils;
import cn.lega.common.util.StrUtils;
import cn.lega.common.util.UploadUtil;
import cn.lega.common.web.BaseController;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.sun.jersey.api.client.Client;
import org.apache.commons.io.FilenameUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ClassPathResource;
import org.springframework.web.bind.annotation.*;
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 javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.Map;

/**
 * 用于处理关于ueditor插件相关的请求
 *
 * @author silianpan
 */
@RestController
@CrossOrigin
@RequestMapping("/common/ueditor")
public class UeditorController extends BaseController {

  // 后台图片保存地址
  @Value("#{configProperties['ueditor']}")
  private String ueditor;

  @Value("#{configProperties['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(); // 原来的文件名
            if (StrUtils.isEmpty(uploadHost) || uploadHost.equals("default")) {
              uploadHost = System.getProperty("user.home") + File.separator;
            }
            String uploadInfo = UploadUtil.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]);// 这里的url字段表示的是上传后的图片在图片服务器的完整地址(http://ip:端口/***/***/***.jpg)
            } else {  // 如果上传失败
            }
            ResponseUtils.renderJson(response, jo.toString());
          }
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    } catch (Exception e) {
    }
  }

//  @RequestMapping(value = "/exec")
//  public void config(HttpServletRequest request, HttpServletResponse response) {
//    // response.setContentType("application/json");
//    String rootPath = request.getSession().getServletContext().getRealPath("/");
//    response.setHeader("Content-Type" , "text/html");
//    try {
//      String exec = new ActionEnter(request, rootPath).exec();
//      PrintWriter writer = response.getWriter();
//      writer.write(exec);
//      writer.flush();
//      writer.close();
//    } catch (IOException e) {
//      e.printStackTrace();
//    }
//  }

  @RequestMapping(value = "/exec")
  @ResponseBody
  public String exec(HttpServletRequest request) throws UnsupportedEncodingException {
    request.setCharacterEncoding("utf-8");
    String rootPath = request.getSession().getServletContext().getRealPath("/");
    return new ActionEnter(request, rootPath).exec();
  }

  @RequestMapping("/ueconfig")
  public void getUEConfig(HttpServletRequest request, HttpServletResponse response) {
    org.springframework.core.io.Resource res = new ClassPathResource("ueditorConfig.json");
    InputStream is = null;
    response.setHeader("Content-Type", "text/html");
    try {
      is = new FileInputStream(res.getFile());
      StringBuffer sb = new StringBuffer();
      byte[] b = new byte[1024];
      int length = 0;
      while (-1 != (length = is.read(b))) {
        sb.append(new String(b, 0, length, "utf-8"));
      }
      String result = sb.toString().replaceAll("/\\*(.|[\\r\\n])*?\\*/", "");
      JSONObject json = JSON.parseObject(result);
      PrintWriter out = response.getWriter();
      out.print(json.toString());
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      try {
        is.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }
}

Vue前端集成

1. 解压jsp版本,拷贝到Vue前端项目static目录中

2. 前端常量配置

// 静态目录
export const STATIC_PATH = process.env.NODE_ENV === 'production' ? './static/' : '/static/'
// UEditor服务路径,对应UeditorController.java上传接口
export const UEDITOR_SERVER = API_BASEURL + '/common/ueditor/ueditorUpload.do'

3. 安装插件vue-ueditor-wrap

npm install vue-ueditor-wrap
or
yarn add vue-ueditor-wrap

4. 编写组件

<template>
  <div>
    <component
      style="width:100%!important"
      :is="currentViewComp"
      transition="fade"
      transition-mode="out-in"
      :config="ueditorConfig"
      v-model="formData[item.prop]"
      :destroy="true"
      @ready="ueReady">
    </component>
  </div>
</template>
<script>
import VueUeditorWrap from 'vue-ueditor-wrap'
import { STATIC_PATH, UEDITOR_SERVER } from '@/config'
export default {
data() {
  return {
   currentViewComp: null,
   ueditorConfig: {
    serverUrl: UEDITOR_SERVER,
    UEDITOR_HOME_URL: STATIC_PATH + 'ueditor1_4_3_3/',
    initialContent: '',
    initialFrameHeight: 400,
    initialFrameWidth: '100%',
    autoHeightEnabled: false
   }
  }
 },
 mounted() {
  this.currentViewComp = VueUeditorWrap
 },
 destroyed() {
  this.currentViewComp = null
 },
 methods: {
  ueReady(editorInstance) {
   this.$nextTick(() => {
    editorInstance.setContent('')
   })
  }
 }
}
</script>

至此,大功告成~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • SpringBoot+Vue.js实现前后端分离的文件上传功能

    这篇文章需要一定Vue和SpringBoot的知识,分为两个项目,一个是前端Vue项目,一个是后端SpringBoot项目. 后端项目搭建 我使用的是SpringBoot1.5.10+JDK8+IDEA 使用IDEA新建一个SpringBoot项目,一直点next即可 项目创建成功后,maven的pom配置如下 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> &l

  • 使用Vue+Spring Boot实现Excel上传功能

    1.使用Vue-Cli创建前端项目 运用vue-cli工具可以很轻松地构建前端项目,当然,使用WebStorm来构建会更加简洁(如图).本文推荐使用WebStorm,因为在后续开发中,IDE会使我们的开发更加简洁.部分配置如图: 2.Navbar编写 作为一个WebApp,Navbar作为应用的导航栏是必不可少的.在本项目中,笔者引入了bootstrap对Navbar进行了轻松地构建.在vue中我们需要在components文件夹中将我们的组件加进去,对于本工程来说,Navbar是我们要加入的第

  • Spring+Vue整合UEditor富文本实现图片附件上传的方法

    下载UEditor https://ueditor.baidu.com/website/download.html 下载完整源码和JSP版本 Spring后端集成 1. 解压完整源码,拷贝jsp目录下的java源码,到spring mvc后端 jsp目录下java源码 集成spring mvc后端 2. 配置config.json 解压JSP版本 拷贝jsp目录下config.json 放到java项目的resource目录下,在这里是ueditorConfig.json 配置config.js

  • asp.net+jquery.form实现图片异步上传的方法(附jquery.form.js下载)

    本文实例讲述了asp.net+jquery.form实现图片异步上传的方法.分享给大家供大家参考,具体如下: 首先我们需要做准备工作: jquery 点击此处本站下载. jquery.form.js 点击此处本站下载. 页面JqueryFormTest.aspx: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="JqueryFormTest.aspx.cs" Inherits=

  • .Net 实现图片缩略图上传通用方法

    日常开发中,经常碰到图片上传的需求,尤其在商城系统开发的时候,商品列表商品图片展示如果使用高清原图,由于高清原图比较大,加载原图时间会大大增加,直接导致系统性能底下,用户体验不好,并发量高的时候直接就挂掉了,这时候后台上传图片的时候,就必须将原高清图进行压缩,生成高质量缩略图,然后在商品列表读取缩略图可以大大减少加载时间,起到一个性能优化的作用,当然在商品详情的时候还是得用高清原图! 以下代码,可以在实际开发中使用将图片高质量压缩,话不多说,代码贴下: /// <summary> /// 生成

  • 基于vue+axios+lrz.js微信端图片压缩上传方法

    业务场景 微信端项目是基于Vux + Axios构建的,关于图片上传的业务场景有以下几点需求: 1.单张图片上传(如个人头像,实名认证等业务) 2.多张图片上传(如某类工单记录) 3.上传图片时期望能按指定尺寸压缩处理 4.上传图片可以从相册中选择或者直接拍照 遇到的坑 采用微信JSSDK上传图片 在之前开发的项目中(mui + jquery),有使用过微信JSSDK的接口上传图片,本想应该能快速迁移至此项目.事实证明编程没有简单的事: 1.按指定尺寸压缩图片 JSSDK提供的接口wx.choo

  • Vue.js结合Ueditor富文本编辑器的实例代码

    在前端开发的项目中.难免会遇到需要在页面上集成一个富文本编辑器. 前一段时间公司Vue.js项目需要使用UEditor富文本编辑器,在百度上搜索一圈没有发现详细的说明,决定自己尝试,忙活了一天终于搞定了. 1. 总体思路 1.1 模块化 vue的很大的一个优势在于模块化,我们可以通过模块化实现页面和逻辑的复用.所以可以把Ueditor重新封装成一个.vue的模板文件.其他组件通过引入这个模板实现代码复用. 1.2 数据传输 首先父组件需要设置编辑器的长度.宽度.初始文本,这些数据可以通过prop

  • YII中Ueditor富文本编辑器文件和图片上传的配置图文教程

    将Ueditor集成到YII框架中后,参照editor_config.js中的toolbars中的内容,更改options中标签可以给编辑器添加想要的功能: 因此要想添加文件和图片上传功能,应该加入以下两个标签: 文本编辑器中便出现了对应的两个选项: 但是点击上传图片按钮后发现,无法正常进行图片上传,文件上传也是失败的,问题都是Flash Player需要升级, 因此在火狐浏览器中安装对应的flash player组件,选择其中一个工作: 此时,文件上传和图片上传功能就能正常使用了: 上传路径的

  • vue中使用ueditor富文本编辑器

    最近在做后台管理系统的时候遇到要使用富文本编辑器.最后选择了ueditor,我的项目使用 vue+vuex+vue-router+webpack+elementUI的方案完成框架的搭建, 1.下载UEditor官网最新的jsp版本的包,下载完成解压之后得到一个utf8-jsp的文件夹,里面包含的内容如下: 2.将这个文件夹改名为ueditor,并且移入自己项目中的static文件夹下,修改ueditor.config.js文件夹中的内容,如下图: 3.编写子组件 <template> <

  • js获取UEditor富文本编辑器中的图片地址

    写之前在网上找了很多方法,最简单的思路应该是1.获取UEditor中的内容:2.将获取到的字符串转换成jquery对象:3.选择器找到img元素,获取src值. var content= UE.getEditor('details').getContent();//获取编辑器内容 var $div = document.createElement("div");//创建一个div元素对象 $div.innerHTML = content;//往div里填充html var $v = $

  • vue使用vue-quill-editor富文本编辑器且将图片上传到服务器的功能

    一.准备工作 下载vue-quill-editor npm install vue-quill-editor --save 或者 yarn add vue-quill-editor 二.定义全局组件quill-editor 下载好vue-quill-editor后,我们需要定义一个全局组件,把这个组件名字命名为quill-editor 1.定义template模板 <div> <quill-editor v-model="value" ref="myQuil

  • Vue2.0中集成UEditor富文本编辑器的方法

    在vue的'项目中遇到了需要使用富文本编辑器的需求,在github上看了很多vue封装的editor插件,很多对图片上传和视频上传的支持并不是很好,最终还是决定使用UEditor. 这类的文章网上有很多,我进行了摸索.手写代码.汇总.排版,形成了这篇文章. 下载对应的UEditor源码 首先,去官网上下载UEditor的源码,根据你后台语言的不同下载对应的版本(PHP.Asp..Net.Jsp). http://ueditor.baidu.com/website/download.html 下载

随机推荐