vue3使用UEditorPlus 、后端配置、上传图片等处理

前端安装

vue3安装vue-ueditor-wrap

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

下载 UEditorPlus

仓库地址 把dist文件复制到vue3项目中的public下,重命名为UEditorPlus
UEditorPlus文档
在这里插入图片描述
在这里插入图片描述

在main.js注册组件

// main.js
import { createApp } from 'vue';
import VueUeditorWrap from 'vue-ueditor-wrap';
import App from './App.vue';createApp(App).use(VueUeditorWrap).mount('#app');

写成全局组件

<template><div class="u-editor-content" style="width: 100%"><vue-ueditor-wrapv-model="content"editor-id="editor":config="editorConfig":editor-dependencies="['ueditor.config.js', 'ueditor.all.js']"style="width: 100%"/></div>
</template>
<script lang="ts" setup>
import { computed } from 'vue'
import useOuth2Store from '@/store/modules/login'
const Outh2 = useOuth2Store()const emits = defineEmits<{(e: 'update:modelValue', value: string): void
}>()const props = withDefaults(defineProps<{modelValue: string
}>(), {modelValue: ''
})const content = computed({get () {return props.modelValue || ''},set (value) {emits('update:modelValue', value)return value}
})
let editorConfig = {// 图片限制最大3MimageMaxSize: 3145728,// 富文本输入框高度initialFrameHeight: 500,// 富文本输入框宽度initialFrameWidth: '100%',// 初始化样式 编辑区自定义样式,如果自定义,最好给 p 标签如下的行高,要不输入中文时,会有跳动感initialStyle: 'body p{line-height:1.8em; margin: 0 ;} h1,h2,h3,h4,blockquote{margin: 0 ;} body table{margin: 0 ;}',autoFloatEnabled: false,// 获取上传配置路径configUrl: import.meta.env.VITE_API_URL + '/info/uEditor/config',// 上传服务路径serverUrl: import.meta.env.VITE_API_URL + '/info/uEditor/upload',// 必须配置域名,否则发版后获取不到页面资源UEDITOR_HOME_URL: location.origin + '/UEditorPlus/',// 配置请求头tokenserverHeaders: {'Authorization': `bearer ${Outh2.token}`},// 上传图片配置imageConfig: {// 禁止在线管理disableOnline: true,}
}
</script><style lang="scss" scoped>
.u-editor-content {:deep(.edui-default) {.edui-editor {border-top: none;}}:deep(.edui-editor-toolbarbox) {position: sticky;top: 0;background-color: #fff;z-index: 1100;border-top: 1px solid #eee;}:deep(body) {margin: 0 !important;* {margin: 0;}}}
</style>

到这一步,引用组件时可以展示富文本了,,但还需要改动代码,否则上传图片等一些弹框无法正常展示

进入ueditor.all.js文件,找dialogIframeUrlMap更改里面的路径,改完后,上传图片等弹框正常展示,但还需要配置上传配置json文件

在这里插入图片描述

还需要把每个html里面的PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”
"http://www.w3.org/TR/html4/loose.dtd"这块删除,不然会报错
在这里插入图片描述

后端代码

config.json

可以通过后端接口返回这一块json数据,或者在public文件夹下创建一个json文件,实际上完全不需要后端配合,后端只需要提供上传接口就行

{"imageActionName": "uploadimage","imageFieldName": "upfile","imageMaxSize": 2048000,"imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"],"imageCompressEnable": true,"imageCompressBorder": 1600,"imageInsertAlign": "none","imageUrlPrefix": "","imagePathFormat": "/uploads/{yyyy}{mm}{dd}/{time}{rand:6}","videoActionName": "uploadvideo","videoFieldName": "upfile","videoPathFormat": "/uploads/{yyyy}{mm}{dd}/{time}{rand:6}","videoUrlPrefix": "","videoMaxSize": 102400000,"videoAllowFiles": [".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid"],"fileActionName": "uploadfile","fileFieldName": "upfile","filePathFormat": "upload/file/{yyyy}{mm}{dd}/{time}{rand:6}","fileMaxSize": 102400000,"fileAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp",".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml", ".crx"]
}

上传接口返回的格式

public function index(){$action = $this->request->param('action');switch($action){case 'config':$result = file_get_contents(ROOT_PATH.'/public/assets/addons/ueditorbjq/config.json');// json文件的路径break;case 'uploadimage':$file = $this->request->file('upfile');if($file){$info = $file->move(ROOT_PATH . 'public' . DS . 'uploads');$res = $info->getInfo();$res['state'] = 'SUCCESS';$res['url'] = '/uploads/'.$info->getSaveName();$result = json_encode($res);}break;case 'uploadvideo':$file = $this->request->file('upfile');if($file){$info = $file->move(ROOT_PATH . 'public' . DS . 'uploads');$res = $info->getInfo();$res['state'] = 'SUCCESS';$res['url'] = '/uploads/'.$info->getSaveName();$result = json_encode($res);}break;case 'uploadfile':$file = $this->request->file('upfile');if($file){$info = $file->move(ROOT_PATH . 'public' . DS . 'uploads' . DS . 'file');$res = $info->getInfo();$res['state'] = 'SUCCESS';$res['url'] = '/uploads/file/'.$info->getSaveName();$result = json_encode($res);}break;default:break;}return $result;}

进入ueditor.all.js文件,找UE.Editor.prototype.loadServerConfig,这里是获取上传配置地方,如果没有配置好,则不能正常进行上传操作,把后端返回的config.json放到utils.merge(me.options, config),如果是前端把json文件放到public下,是直接请求json文件就就行,而且这里是get请求,,上传不在这里处理

在这里插入图片描述

上传处理,看看后端返回的数据格式,并把图片添加到页面上,单张图片上传处理在ueditor.all.js文件,多张图片、视频、文件上传在弹框文件里面处理

在这里插入图片描述
在这里插入图片描述

正常使用与上传

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/577339.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从电荷角度理解开关电容中的电荷守恒

目录 一些铺垫电容的电荷量的解释电荷流入流出对节点电压的影响 从电荷角度理解开关电容加法器中的电荷守恒以开关电容积分器为例说明什么样的节点是电荷守恒 一些铺垫 电容的电荷量的解释 对于一个1F的电容&#xff0c;当它的压差为1V时&#xff0c;它所携带的电荷量是QCU1库…

霸榜京东数据库图书热卖榜!《图数据库:理论与实践》热销中

《图数据库&#xff1a;理论与实践》自2月上市以来&#xff0c;受到了数据库行业的广泛关注与热烈支持&#xff0c;问世两周便销量破千本&#xff01;近期还荣登京东 “数据库图书榜”热卖榜第二名&#xff0c;广获好评&#xff01; 在此&#xff0c;真挚的感谢各位读者的认可…

掌握html这一篇就够了

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、HTML是什么&#xff1f;二、基础标签6个标题标签6级标题其他基础标签 8种文本标签6种表格标签4种表格标签基础标签修饰 4种媒体标签a标签img:图片audio&…

持续交付/持续部署流程主要系统构成(CD)

目录 一、概述 二、持续交付/持续部署主要构成 2.1 镜像容器管理系统 2.1.1 镜像分类 2.1.1.1 磁盘镜像 2.1.1.2 镜像容器 2.1.1.2.1 镜像容器分层管理示意图 2.1.2 镜像容器管理系统软件 2.2 配置管理系统 2.2.1 配置管理系统的功能 2.2.1.1 管理操作系统层、中间件…

云原生(七)、Kubernetes初学 + 裸机搭建k8s集群

Kubernetes简介 Kubernetes&#xff08;通常简称为K8s&#xff09;是一个开源的容器编排平台&#xff0c;最初由Google设计和开发&#xff0c;现在由Cloud Native Computing Foundation&#xff08;CNCF&#xff09;维护。它旨在简化容器化应用程序的部署、扩展和管理。 Kube…

一周学会Django5 Python Web开发-Django5模型定义

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计41条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

黑马点评(Redis实战)项目笔记【10万字!超详细!收藏!】

Redis基础篇 续篇Redis基础篇 知识点参考博客 前言&#xff1a;本文首次完成于语雀文档&#xff0c;发布至个人CSDN分享&#xff0c;全篇内容4万余字&#xff0c;若对您有帮助希望点个赞与收藏&#xff01; 由于缩进格式不兼容等问题&#xff0c;若影响您的观看体验&#xff0c…

‘bash‘ 不是内部或外部命令,也不是可运行的程序或批处理文件

问题描述 运行命令的时候报错&#xff1a;bash 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 解决方案 在anaconda中执行以下命令即可&#xff1a; conda install m2-base 安装完毕后&#xff0c;再运行bash的命令就可以了。

【浅尝C++】使用模板实现泛型编程第二弹=>非类型模板参数/模板特化/模板分离编译详解

&#x1f3e0;专栏介绍&#xff1a;浅尝C专栏是用于记录C语法基础、STL及内存剖析等。 &#x1f3af;每日格言&#xff1a;每日努力一点点&#xff0c;技术变化看得见。 文章目录 非类型模板参数模板的特化概念函数模板特化类模板特化全特化偏特化 模板分离编译分离编译概念模板…

uniapp数组合并函数使用几录

let that { listAll: [1, 2, 3] }; let data [4, 5, 6]; let mergedArray that.listAll.concat(data); console.log(mergedArray); // 输出: [1, 2, 3, 4, 5, 6] console.log(that.listAll); // 输出: [1, 2, 3]&#xff0c;原始数组没有改变 唯有美景&#xff0c;可以抚…

跑spark的yarn模式时RM连不上的情况

在linux控制台跑spark on yarn一个测试案例&#xff0c;日志中总显示RM连yarn服务的时候是&#xff1a;0.0.0.0:8032 具体情况如下图&#xff1a; 我问题出现的原因&#xff0c;总结如下&#xff1a; 1.防火墙没关闭&#xff0c;关闭 2.spark-env.sh这个文件的YARN_CONF_DIR…

程序汪若依微服务华为云Linux部署保姆教程

若依官方有3个版本&#xff0c;程序汪以前已经出了对应的安装部署视频教程 单应用版本 前后分离版本 微服务版本 本视频是若依微服务版本&#xff0c;如果基础的环境软件都不会安装建议看下程序汪的单应用和前后端分离版本教程&#xff0c; 欢迎点击进入 &#xff08;单应…