vue3+springboot集成百度编辑器UEditor-Plus解决图片上传问题

今夕是何年,回首过往,已许久没有写文章了,主要是过去太忙,没有太多闲暇时光,主要还是自己太懒了吧😂。废话不多说,今天主要是记录使用vue3集成百度编辑器解决上传图片的问题,我一直以为百度编辑器没有更新了,很久没有关注了,直到最近在gitee上面刷到了UEditor-Plus项目,才知道有新的维护了,体验了一下感觉还是蛮不知错的。在实际项目中也用过很多编辑器,有的时候一些功能就很难满足需求,之前用过wangEditor使用很方便,集成也非常简单,但是表格功能没有合并单元格功能,最近作者也说停止维护更新了,找一款好用的编辑器尤为重要,百度编辑器功能这块还是蛮丰富的,所以今天就简单记录一下我集成的过程和所采的坑。

第一步:1.先解决前端集成问题,现在vue比较主流,相关的组件已经封装好了,官网直达就知道怎么用了vue-ueditor-wrap,通过以下命令之间安装就ok了。

# vue-ueditor-wrap v3 仅支持 Vue 3
npm i vue-ueditor-wrap@3.x -S
# or
yarn add vue-ueditor-wrap@3.x

2.在main.js中配置

import {VueUeditorWrap} from "vue-ueditor-wrap";
app.use(VueUeditorWrap)
  1. 在具体的页面中使用
<template>
  <vue-ueditor-wrap v-model="content"
                                 editor-id="editor"
                                 :config="editorConfig"
                                 :editorDependencies="['ueditor.config.js','ueditor.all.js']"
                                 style="height:500px;"/>

</template>
<script>
  const content = ref('')
const editorConfig=ref({
  zIndex:10000, //设置层级
  initialFrameWidth:'100%', //设置编辑器宽度
  
  serverUrl: 'http://xx.xx.xx/uEditor'  //统一请求服务器地址(上传接口地址)
  // 配置 UEditorPlus 的静态资源根路径,可以是 CDN 的静态资源地址
  UEDITOR_HOME_URL: '/UEditor/', //在vue项目public目录中导入的编辑器静态资源
  UEDITOR_CORS_URL: '/UEditor/'
})
</script>

静态资源在vue-ueditor-wrap文档里面有说明,安装组件的下一步下载UEeitor资源即可。


image.png

根据需要自己下载合适的版本,下载后将目录拷贝至vue的public目录,命名一个文件夹,这个和上述UEDITOR_HOME_URL: '/UEditor/' 有关,比如我的目录叫UEditor,这样配置就可以了,这些配置好以后,编辑器就可以展示出来了,效果如下:

image.png

ok,出现这个效果说明配置OK了,但是此时,图片上传是不行的,提示上传插件配置异常


image.png

解决这个问题,需要结合后端配置,接下来我们就该处理图片上传的问题了。

第二步:处理图片及文件上传问题,百度编辑器和其他编辑器不太一样的地方是提供了后台相关的开发包demo,我们根据自己的需要进行下载参考。https://open-doc.modstart.com/ueditor-plus/backend.html#uploadimage 阅读这个文档我们得知文件上传的接口规范信息

GET {"action": "config"}  //读取配置的action名称
GET {"action": "uploadimage"} //上传图片的action名称
POST "upfile": File Data //上传文件的name名称

上传返回格式:
{
   "state": "SUCCESS",
   "url": "upload/demo.jpg",
   "title": "demo.jpg",
   "original": "demo.jpg"
}

有了这些消息,就知道怎么处理接口了,在我们下载的资源包里面有个jsp/config.json文件,这个就是返回配置的具体内容,拷贝至springboot项目的resources目录


image.png

定义编辑器文件上传接口


    /**
     * UEditor编辑器上传处理
     * @param action
     * @param upfile 
     * @return
     */
    @RequestMapping("/uEditor")
    public Object uEditor(@RequestParam("action") String action,@RequestParam(value = "upfile",required = false) MultipartFile upfile)  {

    //判断action:为config时,返回config.json的内容即可
   switch (action){
            case "config":
                final InputStream resourceAsStream =  
             App.class.getResourceAsStream("/uEditor/config.json");

                assert resourceAsStream != null;
                try(BufferedReader reader = new BufferedReader(new InputStreamReader(resourceAsStream))){
                    String line;
                    final StringBuilder sb = new StringBuilder();
                    while ((line=reader.readLine())!=null){

                        sb.append(line);

                    }

                    return sb.toString();
                } catch (IOException e) {

                    e.printStackTrace();

                    return null;
                }
            //图片上传
            case "uploadimage":

                if(upfile!=null){

                     //todo 具体保存文件逻辑(伪代码)请替换自己的逻辑
                       FileInfo  fileInfo = uploadService.upload(upfile)

                    final HashMap<Object, Object> map = new HashMap<>(4);

                    map.put("state","SUCCESS");
                    map.put("title",fileInfo.getOriginalName());
                    map.put("original",fileInfo.getOriginalName());
                    map.put("url",fileInfo.getUrl());

                    return map;

                }

        }
 
}

Q1:这样就可以了吗???不行,发现还是不能上传,还是提示插件加载失败,原因是什么呢?问题在前端的编辑器资源包中ueditor.all.js,因为我的springboot是支持跨域请求的,而ueditor.all.js中有个加载配置请求,跨域的话是使用jsonp来请求的,而我们的接口又不支持jsonp请求,所以这个接口访问config配置的时候加载失败,找到ueditor.all.js,改一下逻辑,将jsonp请问标识改成fasle,让ajax发起非jsonp请求即可


image.png

ok,再刷新页面看看,图片上传插件就加载成功了,至此上传图片的配置就完成了,当然了其他的视频、附件等也是同理只是不同的action标识而已,如果方便的话都改成统一的action名称就可以了,单独处理就判断action名称就可以了。

image.png

Q2:加了接口了,改了serverUrl,还是显示加载插件失败,需要在组件里面要加这个配置 :editorDependencies="['ueditor.config.js','ueditor.all.js']" 这个配置必须加上,否则不会执行ajax获取配置的请求,确保访问action=config的时候返回config.json的内容即可。

Q3:上传的图片设置img标签图片宽度自适应,网上很多人说在静态资源包themes下的iframe.css里面加样式

img{width:100%}

的确,加了之后上传图片是会自动适应编辑器了,但是图片本身是没有样式的,放到前端展示还是会有问题,除非自己单独设置img的样式,不然还是会不适配。那怎么自动给img标签加上style样式呢,还是在ueditor.all.js里面修改
修改1:


image.png

修改2 :


image.png
loader.setAttribute('style','max-width:100%');

这样就可以了,上传图片成功后,img标签会自动加style属性,这样富文本中的图片在前端展示的时候就会自适应了,不需要额为加css控制了。

总结: 本篇文章主要通过以上两步,介绍了UEditor-plus的集成以及相关问题的处理,这就是我这使用UEditor-plus编辑器过程会遇到的问题以及处理方法,当然这不是唯一的,得具体问题具体分析。希望能够帮助到有需要的朋友,有问题欢迎留言交流,喜欢我的文章记得关注我哦😊!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容