vue-quill-editor插入图片路径太长问题解决方法


Posted in Vue.js onJanuary 08, 2021

最近做项目的时候有一个发布新闻的需求,新闻编辑的时候要求能发布带格式的文本内容和能展示支持图片。
由于项目是用 Vue 开发的,所以找编辑器的时候选了 vue-quill-editor 。编辑器长如下的样子:

vue-quill-editor插入图片路径太长问题解决方法

现在的问题

但是这个编辑器会把插入的图片会转成 base64 位的编码,使得编辑器内容保存进数据库的时候会超出限制长度,从而报错。

vue-quill-editor插入图片路径太长问题解决方法

从问题来源着手

首先要明白导致这个问题的原因是 vue-quill-editor 编辑器默认把上传的图片给转成 base64 编码,那是不是有这么一个配置参数可以设置上传后图片的格式呢?经过一番文档的查找,貌似是没有。但是提供了一个 handlers 可以自定义图片上传的方式,那就从这里下文章。大概意思是点击这个图片按钮的时候,会出发一个回调,可以在回调里触发自己的文件上传开关。这里我用的文件上传是 element-ui 的 el-upload。

安装vue-quill-editor

npm install vue-quill-editor --save

配置vue-quill-editor

配置 html

<quill-editor
  v-model="ruleForm.content"
  ref="myQuillEditor"
  :options="editorOption"
  class="ql-editor"
  :class="operationType.includes('check') ? 'disabled' : ''"
  :disabled="operationType.includes('check')"
  >
</quill-editor>

导入vue-quill-editor 且设置components:

import { quillEditor } from 'vue-quill-editor'
export default {
  components: {
    quillEditor
  }
}

设置options:

editorOption:{
  modules: {
    toolbar: {
      container: [
        ['bold', 'italic', 'underline', 'strike'],
        ['blockquote', 'code-block'],
        [{ 'list': 'ordered' }, { 'list': 'bullet' }],
        [{ 'script': 'sub' }, { 'script': 'super' }],
        [{ 'indent': '-1' }, { 'indent': '+1' }],
        [{ 'size': ['small', false, 'large', 'huge'] }],
        [{ 'header': [1, 2, 3, 4, 5, 6, false] }],
        [{ 'color': [] }, { 'background': [] }],
        [{ 'align': [] }],
        ['clean'],
        ['link', 'image']
      ],
      handlers: {
        image: function(value) {
          if (value) {
            // 触发element-ui的文件上传
            document.querySelector(".avatar-uploader input").click();
          } else {
            this.quill.format("image", false);
          }
        },
      }
    }
  },
  placeholder: '请输入',
},

引入相关style:

<style lang="scss">
 @import '~quill/dist/quill.core.css';
 @import '~quill/dist/quill.snow.css';
 @import '~quill/dist/quill.bubble.css';
</style>

配置el-upload

template:

<el-upload
  ref="quillUploader"
  class="avatar-uploader"
  :action="serverUrl"
  :show-file-list="false"
  :auto-upload="false"
  :on-change="onChangeQuill"
  :before-upload="beforeUpload"
  :limit="20"
  :multiple="true"
  :accept="acceptFile">
</el-upload>

onChange的时候执行文件上传,这里的文件上传用的是腾讯的对象存储服务,cosUtils封装了一些对象存储的一些工具方法,你们可以自行替换成自己后端的上传接口。下面这段代码的大概意思是文件上传到对象存储服务器成功之后,拿到具体的图片地址,插入到编辑器光标所在的位置,这个时候图片就显示出来了。

onChangeQuill(file, fileList) { 
  let fileName = file.uid + file.name
  cosUtils.putObject(fileName, file.raw, 'operate/', (err, data) => { // 新闻图片存到operate/目录下
    console.log(err || data)
    if (!err) { 
      let quill = this.$refs.myQuillEditor.quill
      let length = quill.getSelection().index
      // 图片上传到对象存储后的具体地址
      let imgSrc = `https://xxxxxxx.cos.ap-shanghai.myqcloud.com/operate/${fileName}`
      quill.insertEmbed(length, "image", imgSrc)
      // 调整光标到最后
      quill.setSelection(length + 1)
    }
  })
}

到此这篇关于vue-quill-editor插入图片路径太长问题解决方法的文章就介绍到这了,更多相关vue-quill-editor 图片路径 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
浅析VUE防抖与节流
Nov 24 Vue.js
vue3.0+vue-router+element-plus初实践
Dec 02 Vue.js
Vue如何实现验证码输入交互
Dec 07 Vue.js
vue实现图片裁剪后上传
Dec 16 Vue.js
Vue实现省市区三级联动
Dec 27 Vue.js
vue中配置scss全局变量的步骤
Dec 28 Vue.js
利用Vue实现简易播放器的完整代码
Dec 30 Vue.js
vue二选一tab栏切换新做法实现
Jan 19 Vue.js
vue前端和Django后端如何查询一定时间段内的数据
Feb 28 Vue.js
HTML+VUE分页实现炫酷物联网大屏功能
May 27 Vue.js
vue使用echarts实现折线图
Mar 21 Vue.js
vue中使用mockjs配置和使用方式
Apr 06 Vue.js
vue编写简单的购物车功能
Jan 08 #Vue.js
解决vue使用vant轮播组件swipe + flex时文字抖动问题
Jan 07 #Vue.js
vuex的使用和简易实现
Jan 07 #Vue.js
vue watch监控对象的简单方法示例
Jan 07 #Vue.js
vue.js watch经常失效的场景与解决方案
Jan 07 #Vue.js
通过vue.extend实现消息提示弹框的方法记录
Jan 07 #Vue.js
如何在vue-cli中使用css-loader实现css module
Jan 07 #Vue.js
You might like
PHP使用range协议实现输出文件断点续传代码实例
2014/07/04 PHP
destoon实现调用图文新闻的方法
2014/08/21 PHP
Yii 快速,安全,专业的PHP框架
2014/09/03 PHP
php实现的支持断点续传的文件下载类
2014/09/23 PHP
php从完整文件路径中分离文件目录和文件名的方法
2015/03/13 PHP
javascript实现的listview效果
2007/04/28 Javascript
从零开始学习jQuery (十) jQueryUI常用功能实战
2011/02/23 Javascript
兼容IE和Firefox火狐的上下、左右循环无间断滚动JS代码
2013/04/19 Javascript
超简单JS二级、多级联动的简单实例
2014/02/18 Javascript
纯JS实现可拖拽表单的简单实例
2016/09/02 Javascript
最细致的vue.js基础语法 值得收藏!
2016/11/03 Javascript
Angularjs验证用户输入的字符串是否为日期时间
2017/06/01 Javascript
underscore之Chaining_动力节点Java学院整理
2017/07/10 Javascript
取消Bootstrap的dropdown-menu点击默认关闭事件方法
2018/08/10 Javascript
JS字符串补全方法padStart()和padEnd()
2020/05/27 Javascript
解决echarts echarts数据动态更新和dataZoom被重置问题
2020/07/20 Javascript
vue插件--仿微信小程序showModel实现模态提示窗功能
2020/08/19 Javascript
Python中的一些陷阱与技巧小结
2015/07/10 Python
详解python 字符串和日期之间转换 StringAndDate
2017/05/04 Python
python 函数传参之传值还是传引用的分析
2017/09/07 Python
Python中turtle作图示例
2017/11/15 Python
Python之Scrapy爬虫框架安装及使用详解
2017/11/16 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
2018/10/15 Python
python中with用法讲解
2020/02/07 Python
Public Desire美国/加拿大:全球性的在线鞋类品牌
2018/12/17 全球购物
金讯Java笔试题目
2013/06/18 面试题
索引覆盖(Index Covering)查询含义
2012/02/18 面试题
医药大学生求职简历的自我评价
2013/10/17 职场文书
工商技校毕业生自荐信
2013/11/15 职场文书
动画设计系毕业生求职信
2014/07/15 职场文书
幼儿园秋季开学寄语
2014/08/02 职场文书
长城导游词
2015/01/30 职场文书
区域销售经理岗位职责
2015/04/02 职场文书
2016关于预防职务犯罪的心得体会
2016/01/21 职场文书
Win11显卡控制面板打开显卡设置方法
2022/04/20 数码科技
微软发布Windows 11今年最大更新22H2(附 ISO 镜像官方下载)
2022/09/23 数码科技