最新要闻
- 滚动:新金路(000510.SZ):提请股东大会授权董事局办理以简易程序向特定对象发行股票
- 英足总杯丨马赫雷斯“戴帽”,曼城挺进决赛|精选
- 让老外爱上“砍一刀”!拼多多Temu英国站已正式上线 天天亮点
- 每日播报!圆球停在斜坡顶端 网友称物理学不存在了 体彩中心:可能是天气原因
- 美国多个州要求召回韩国汽车:缺乏基本的防盗装置 危及公共安全
- 环球快消息!比亚迪百万豪车!仰望U8开车第一视角曝光:马路都感觉变窄了
- 蛋蛋面膜真的能去皱纹吗_蛋蛋面膜
- 亚香股份: 2022年年度报告摘要
- 全球速读:劳斯莱斯不让进展台 小姐姐直接买了仰望U8、仰望U9两款车
- 【时快讯】广州街头大众CC变道不成 倒车怒撞奔驰E 网友直呼太恶劣
- 华为宣布开放5G网络能力 自家5.5G比5G快10倍|焦点速读
- 什么是期货对冲交易 全球独家
- 每日观点:歌词那些遗憾留在心底_心中的遗憾歌词
- 当前观察:今日沈阳老凤祥黄金价格查询(2023年4月23日)
- 全球快播:提车时大风吹倒墙壁新车被砸 男子:4S店只修不换不退
- 【当前独家】抖音推出种草产品有柿App 由头条搜索升级而来
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
热消息:Vue3 +element-plus+ wangEditor 富文本编辑器+前端七牛云上传
【资料图】
我用的vue3,element-plus ,没用ts 搭建wangEditor参考 地址https://www.cnblogs.com/xbxxf/p/16791084.html 七牛云安装参考地址https://blog.csdn.net/ldoit/article/details/121533204本来就是抄大佬的,就不复制粘贴了 主要是整理关于七牛云部分的代码,秉着复制就能用的原则,我把自己封装好的组件复制过来,改改参数即可使用 新建tokenTools.js文件
/* utf.js - UTF-8 <=> UTF-16 convertion * * Copyright (C) 1999 Masanao Izumo* Version: 1.0 * LastModified: Dec 25 1999 * This library is free. You can redistribute it and/or modify it. *//* * Interfaces: * utf8 = utf16to8(utf16); * utf16 = utf8to16(utf8); */import CryptoJS from "crypto-js"const dataJSON = { utf16to8(str) { var out, i, len, c; out = ""; len = str.length; for (i = 0; i < len; i++) { c = str.charCodeAt(i); if ((c >= 0x0001) && (c <= 0x007F)) { out += str.charAt(i); } else if (c > 0x07FF) { out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F)); out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F)); out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F)); } else { out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F)); out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F)); } } return out; }, utf8to16(str) { var out, i, len, c; var char2, char3; out = ""; len = str.length; i = 0; while (i < len) { c = str.charCodeAt(i++); switch (c >> 4) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: // 0xxxxxxx out += str.charAt(i - 1); break; case 12: case 13: // 110x xxxx 10xx xxxx char2 = str.charCodeAt(i++); out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F)); break; case 14: // 1110 xxxx 10xx xxxx 10xx xxxx char2 = str.charCodeAt(i++); char3 = str.charCodeAt(i++); out += String.fromCharCode(((c & 0x0F) << 12) | ((char2 & 0x3F) << 6) | ((char3 & 0x3F) << 0)); break; } } return out; }, // ======================================================== /* * Interfaces: * b64 = base64encode(data); * data = base64decode(b64); */ base64encode(str) { var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; var base64DecodeChars = new Array(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1); var out, i, len; var c1, c2, c3; len = str.length; i = 0; out = ""; while (i < len) { c1 = str.charCodeAt(i++) & 0xff; if (i == len) { out += base64EncodeChars.charAt(c1 >> 2); out += base64EncodeChars.charAt((c1 & 0x3) << 4); out += "=="; break; } c2 = str.charCodeAt(i++); if (i == len) { out += base64EncodeChars.charAt(c1 >> 2); out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)); out += base64EncodeChars.charAt((c2 & 0xF) << 2); out += "="; break; } c3 = str.charCodeAt(i++); out += base64EncodeChars.charAt(c1 >> 2); out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)); out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6)); out += base64EncodeChars.charAt(c3 & 0x3F); } return out; }, base64decode(str) { var c1, c2, c3, c4; var i, len, out; len = str.length; i = 0; out = ""; while (i < len) { /* c1 */ do { c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff]; } while (i < len && c1 == -1); if (c1 == -1) break; /* c2 */ do { c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff]; } while (i < len && c2 == -1); if (c2 == -1) break; out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4)); /* c3 */ do { c3 = str.charCodeAt(i++) & 0xff; if (c3 == 61) return out; c3 = base64DecodeChars[c3]; } while (i < len && c3 == -1); if (c3 == -1) break; out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2)); /* c4 */ do { c4 = str.charCodeAt(i++) & 0xff; if (c4 == 61) return out; c4 = base64DecodeChars[c4]; } while (i < len && c4 == -1); if (c4 == -1) break; out += String.fromCharCode(((c3 & 0x03) << 6) | c4); } return out; }, safe64(base64) { base64 = base64.replace(/\+/g, "-"); base64 = base64.replace(/\//g, "_"); return base64; }, // 我把获取生成token的放这里,然后直接用就行了 // scope 七牛云文件名,就比如你在广东区域创建的images3z文件夹下的文件 qiniuToken(AccessKey, SecretKey, scope = "images3z") { let timestamp = new Date().getTime() // 当前的时间戳 timestamp = parseInt(timestamp / 1000) + 36000 let putPolicy = { "scope": scope, // 七牛云文件名,最好跟着改下 "deadline": timestamp } // SETP 2 let put_policy = JSON.stringify(putPolicy) // SETP 3 let encoded = dataJSON.base64encode(dataJSON.utf16to8(put_policy)); // SETP 4 let hash = CryptoJS.HmacSHA1(encoded, SecretKey); let encoded_signed = hash.toString(CryptoJS.enc.Base64); // SETP 5 return AccessKey + ":" + dataJSON.safe64(encoded_signed) + ":" + encoded; }}export default dataJSON// ================================================// 使用方法 npm install crypto-js// 引入 import qiniuJSON from "@/utils/tokenTools"// 使用 console.log(qiniuJSON.qiniuToken(AccessKey,SecretKey,scope))
wangEditor 封装组件wangEditor_qiniu.vue 里面注释我感觉还行,更改里面的参数啥的就行了
<script setup>// import "@wangeditor/editor/dist/css/style.css" // 引入 cssimport { onBeforeUnmount, ref, shallowRef, defineProps, defineExpose, reactive } from "vue"import { Editor, Toolbar } from "@wangeditor/editor-for-vue"import { ElMessage } from "element-plus"import qiniuJSON from "@/utils/tokenTools"import * as qiniu from "qiniu-js" // npm install qiniu-jsimport { useVModel } from "@vueuse/core" // npm install @vueuse/corelet mode = ref("default")// 编辑器实例,必须用 shallowRefconst editorRef = shallowRef()const toolbarConfig = { excludeKeys: [ "fullScreen",//不显示全屏 // "group-video", // 不显示上传视频 "uploadVideo" ]}//菜单配置const editorConfig = { placeholder: "请输入内容...", MENU_CONF: { // 配置默认字号 // 配置上传图片 uploadImage: { // 自定义上传图片到七牛云 async customUpload (file, insertFn) { console.log("file", file) const isPic = file.type.split("/")[0] === "image"; const isLt2M = file.size / 1024 / 1024 <= 10; if (!isPic) { ElMessage.error("只能上传图片噢~"); } else if (!isLt2M) { ElMessage.error("上传图片大小不能超过 10MB!"); } else { let url = ""; let token = qiniuJSON.qiniuToken("yZmoyHLyxFv_-mcigSrbNyTS", "jl8QhXcctVweMQoKft9I", "images3z") let config = { useCdnDomain: true, //表示是否使用 cdn 加速域名,为布尔值,true 表示使用,默认为 false。 region: "https://upload-z2.qiniup.com" // 根据具体提示修改上传地区,当为 null 或 undefined 时,自动分析上传域名区域 }; let putExtra = { fname: "", //文件原文件名 params: {}, //用来放置自定义变量 mimeType: null }; // jiancai/upload_pic_ 中 jiancai 是七牛云空间所属的文件夹名称 如果有多个,你也可以写成jiancai/jiancai/ 都行 var observable = qiniu.upload(file, "uploadImg/upload_pic_" + file.name, token); observable.subscribe({ complete: (result) => { // 利用七牛云注册成功后配置的地址 + 七牛云返回唯一的key,访问上传到七牛云的图片。 url = `http://zt.zhninfo.com/${result.key}` insertFn(url, `${result.key}`, ""); // 将图片插入编辑器显示 } }) } } } }}// 组件销毁时,也及时销毁编辑器onBeforeUnmount(() => { const editor = editorRef.value if (editor == null) return editor.destroy()})const handleCreated = (editor) => { editorRef.value = editor // 记录 editor 实例,重要! // 查看所有工具栏key,先查看可以根据实际情况进项增删 // console.log(JSON.stringify(editor.getAllMenuKeys()))}// 组件双向绑定代码// 内容 HTMLconst data = reactive({ valueHtml: ""})// 初始值const propsValue = defineProps({ modelValue: String})const emit = defineEmits(["update:modelValue"])// @vueuse/core 的实现// 使用 useVModel 实现双向数据绑定 v-model 指令// 1. 使用 props 接收 modelValue// 2. 使用 useVModel 来包装props中的 modelValue 属性数据// 3. 在使用 checked.value就是使用父组件数据// 4. 在使用 checked.value = "数据" 赋值的时候,就会自动触发 emit("update:modelvalue", "数据")// 5. 也可以手动触发别的事件 例如这里的 changelet imageUrl = useVModel(propsValue, "modelValue", emit)data.valueHtml = ![undefined, null].includes(propsValue.modelValue) ? imageUrl.value : ""// console.log("-----data.valueHtml-------", data.valueHtml, propsValue.modelValue)// 富文本编辑器内容监听const updateHtml = (val) => { imageUrl.value = data.valueHtml}// 父组件调用子组件手动清空const updateHtmlPlay = () => { imageUrl = useVModel("", "modelValue", emit) data.valueHtml = "" console.log(imageUrl, "------父组件调用子组件手动清空------", data.valueHtml)}defineExpose({ updateHtmlPlay })</script>
使用
关键词:
-
热消息:Vue3 +element-plus+ wangEditor 富文本编辑器+前端七牛云上传
我用的vue3,element-plus,没用ts搭建wangEditor& 160;参考地址& 160;https: www cnblogs com xbxxf p 16791084 htm
来源: 热消息:Vue3 +element-plus+ wangEditor 富文本编辑器+前端七牛云上传
《Redis设计与实现》读书笔记 焦点简讯
2023年团体程序设计天梯赛 题解
环球观天下!并发编程(1)-线程与锁
前沿资讯!性能测试工具Locust和JMeter比较-及相关书籍下载
滚动:新金路(000510.SZ):提请股东大会授权董事局办理以简易程序向特定对象发行股票
英足总杯丨马赫雷斯“戴帽”,曼城挺进决赛|精选
让老外爱上“砍一刀”!拼多多Temu英国站已正式上线 天天亮点
每日播报!圆球停在斜坡顶端 网友称物理学不存在了 体彩中心:可能是天气原因
美国多个州要求召回韩国汽车:缺乏基本的防盗装置 危及公共安全
环球快消息!比亚迪百万豪车!仰望U8开车第一视角曝光:马路都感觉变窄了
蛋蛋面膜真的能去皱纹吗_蛋蛋面膜
「学习笔记」重修 FHQ-treap
Godot 4.0 设置应用程序图标、项目图标
Springboot yml配置参数加密 ,jasypt自定义解密器|当前简讯
国家能源局:截至3月底全国累计发电装机容量约26.2亿千瓦 同比增长9.1%
亚香股份: 2022年年度报告摘要
全球速读:劳斯莱斯不让进展台 小姐姐直接买了仰望U8、仰望U9两款车
【时快讯】广州街头大众CC变道不成 倒车怒撞奔驰E 网友直呼太恶劣
华为宣布开放5G网络能力 自家5.5G比5G快10倍|焦点速读
什么是期货对冲交易 全球独家
每日观点:歌词那些遗憾留在心底_心中的遗憾歌词
人机识别技术再升级,AIGC为验证码带来万亿种新变化_环球关注
从热爱到深耕,全国Top10开源软件出品人手把手教你如何做开源 微头条
当前观察:今日沈阳老凤祥黄金价格查询(2023年4月23日)
全球快播:提车时大风吹倒墙壁新车被砸 男子:4S店只修不换不退
【当前独家】抖音推出种草产品有柿App 由头条搜索升级而来
体彩开奖球停在斜坡不下滚遭质疑是什么情况
观察:厦门国际银行助力企业赴澳发行首笔“深合债”
詹姆斯:我职业生涯中和很多人有过对决 所以我不想谈狄龙 焦点快播
重返韩国!2023《英雄联盟》S13全球总决赛10月开战:赛程抢先看-全球快看
穿一次扔了都不亏!阿里工厂店大促:船袜6毛4一双起
全球报道:傅索安巴甫洛夫 傅索安怎么死的
优化数据呈现方式,分组双轴图是最佳选择|实时焦点
天天百事通!Transformer
无惧百万级并发,GaussDB(for Cassandra)让华为推送服务更快触达
使用手机在网状态查询 API 有效防止虚假注册的设计思路 全球简讯
视焦点讯!CAS的service参数验证
头条焦点:缬怎么读(缬字怎么读“缬”的读音是:[xié]【释义】)
上不上名校的区别,藏在李雪琴陈都灵的采访中,演员层次分出来了
环球简讯:奇瑞艾瑞泽STAR概念实车现身 网友:换个BBA的标 能卖百万
被泰国红牛告了 禁止生产销售!中国红牛回应:系网络水军抹黑-世界热点
【速看料】燕矶长江大桥北锚碇填芯混凝土大方量浇筑打破项目纪录
NGINX 备忘清单_开发速查表分享_时讯
孕产妇营养饮食大全 全球今头条
环球热门:雀巢丝滑拿铁咖啡15瓶到手59.8元:榛果、焦糖等多种口味
外观大变 增插混版!全新广汽本田雅阁将于5月底上市 全球快资讯
SpaceX星舰发射导流槽都没挖!马斯克:大意了 焦点短讯
4种口味任选 超划算:和路雪千层雪冰淇淋3.87元大促 _世界新要闻
有望下跌!国内油价五一节前调整 预计下调0.07元/升-微资讯
最新资讯:泡菜坛口用水密封的目的 泡菜坛口为什么要用水密封呢
华为云GaussDB支撑华为MetaERP系统全面替换
券商业绩大反攻!“券茅”获基金大幅加仓
15平方米公共绿地被居民私自硬化,路长、物业齐出手
具俊晔有孩子吗?具俊晔个人资料简介
超频冲上3.1GHz!索泰RTX 4070天启OC评测:远超公版的2K游戏最香显卡 天天新要闻
天天精选!公司要求开宝马卖车否则开除!员工回应:没人开宝马
黑猫警长一只耳的耳朵是怎么没的?黑猫警长中一只耳的娘舅是谁?
回家的诱惑宝莲身世第几集揭晓?回家的诱惑宝莲最后和谁在一起了?
张萌制片的作品有哪些?男制片人张萌简介
西海情歌的原唱是谁?西海情歌背后真实的故事
outlook怎么设置msn邮箱?outlook怎么撤回邮件?
第四范式联合创始人胡时伟:AIGC可能带来企业生产要素的变化
塞班s60v3还能用微信吗?塞班手机性能排行
三星笔记本r23plus黑屏怎么解决?三星笔记本r23plus配置
地下城与勇士刺客刷图厉害吗?地下城与勇士刺客转职什么好?
常用的 API 大全整理|全球热消息
【全球速看料】【Spring】三级缓存解决循环依赖问题
支付宝安全控件怎么升级?支付宝安全控件有什么用?
花汐与眠王12 看热讯
全球百事通!李楠评MINI冰淇淋事件:宝马公关写道歉信是真的蠢
【新要闻】专注和沉浸 是华为墨水平板赋予信息碎片化时代的“稀缺品”
第28个世界读书日你读书了吗?超8成图书被已婚人群买走:为了下一代-焦点滚动
海南部署开展道路交通安全和运输执法领域突出问题专项整治工作 每日快播
兵马俑景区“五一”门票预售啦
《安富莱嵌入式周报》第310期:集成大语言模型的开源调试器ChatDBG, 多功能开源计算器,M7内核航空航天芯片评估板, Zigbee PRO规范
世界热议:前端跨域解决方案——postMessage
不回皇马!齐达内出山,无视6000万年薪,拒联手C罗,意甲乱了
世界动态:仿真手感 全身可按:允宝充气颈部按摩仪99元新低(335元券)
【播资讯】小米13 Ultra可变光圈能晃动?小米王化科普:正常物理现象
今日上海消费券线上哪些商家可以用(上海消费如何)
微博如何查看自己评论过的动态(微博如何查看自己评论过的动态记录) 每日简讯
每日热门:超快充伤电池吗?实测:240W用了2个月 手机电池健康度依然100%
比亚迪赵长江:很多客户都是抛弃雷克萨斯LM 过来买腾势D9 天天资讯
直降200元!45mm GPS款苹果表8限时好价
朱砂供星月菩提变色8个过程图_朱砂供星月菩提 每日短讯
我国三款商业液体火箭发动机发布!综合性能达国际先进水平
园方回应熊猫阿宝耳朵被咬成V形:繁殖期太激动 没大碍 世界热消息
安卓手机ip地址更换_1024最新手机地址一二
学系统集成项目管理工程师(中项)系列10_立项管理 世界资讯
环球速看:闺女15岁生日送什么礼物,15岁女孩生日,送什么礼物好?
贡萨洛-拉莫斯谈百场里程碑:齐心协力,全力以赴 全球视讯
当前简讯:青龙面板基础知识和使用教程
怎么做动图表情包_怎么做动图-当前热闻
小米13 Ultra供不应求:明天再次开卖 5999元起_每日讯息
成龙新电影《传说》开拍!女主角是古力娜扎
买冰箱空调洗衣机少踩雷!这些选购干货看下
观热点:是不是觉得微博热搜很蠢?他们好像也意识到了 但没办法
车上被砸冰淇淋、遭谩骂!宝马车主无辜受牵连不敢开车出门、要贱卖车:求理性
英雄无悔_关于英雄无悔的简介 世界速递