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中使用mockjs代码实例
Nov 25 Vue.js
vue表单验证之禁止input输入框输入空格
Dec 03 Vue.js
Vue——解决报错 Computed property &quot;****&quot; was assigned to but it has no setter.
Dec 19 Vue.js
Vue 修改网站图标的方法
Dec 31 Vue.js
vue 实现图片懒加载功能
Dec 31 Vue.js
vue编写简单的购物车功能
Jan 08 Vue.js
vue实现验证用户名是否可用
Jan 20 Vue.js
深入了解Vue动态组件和异步组件
Jan 26 Vue.js
vue实力踩坑之push当前页无效
Apr 10 Vue.js
vue+elementUI实现表格列的显示与隐藏
Apr 13 Vue.js
vue项目配置sass及引入外部scss文件
Apr 14 Vue.js
关于vue-router-link选择样式设置
Apr 30 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
DOMXML函数笔记
2006/10/09 PHP
使用PHP模拟HTTP认证
2006/10/09 PHP
Discuz! 6.1_jQuery兼容问题
2008/09/23 Javascript
javascript 函数使用说明
2010/04/07 Javascript
js创建数据共享接口——简化框架之间相互传值
2011/10/23 Javascript
Jquery命名冲突解决的五种方案分享
2012/03/16 Javascript
复制网页内容,粘贴之后自动加上网址的实现方法(脚本之家特别整理)
2014/10/16 Javascript
jQuery实现的漂亮表单效果代码
2015/08/18 Javascript
Bootstrap学习笔记之js组件(4)
2016/06/12 Javascript
关于javascript的一些知识以及循环详解
2016/09/12 Javascript
JS实现显示当前日期的实例代码
2018/07/03 Javascript
关于AngularJS中ng-repeat不更新视图的解决方法
2018/09/30 Javascript
vue组件实践之可搜索下拉框功能
2018/11/25 Javascript
vue 双向数据绑定的实现学习之监听器的实现方法
2018/11/30 Javascript
python脚本监控docker容器
2016/04/27 Python
详细解读tornado协程(coroutine)原理
2018/01/15 Python
python 3.7.0 安装配置方法图文教程
2018/08/27 Python
python实现爬山算法的思路详解
2019/04/09 Python
如何基于pythonnet调用halcon脚本
2020/01/20 Python
基于python SMTP实现自动发送邮件教程解析
2020/06/02 Python
Python Matplotlib简易教程(小白教程)
2020/07/28 Python
Python下载的11种姿势(小结)
2020/11/18 Python
如何查看python关键字
2021/01/17 Python
L’AGENCE官网:加州女装品牌
2018/06/03 全球购物
九年级科学教学反思
2014/01/29 职场文书
售后服务承诺书范文
2014/03/26 职场文书
销售经理竞聘书
2014/03/31 职场文书
公证委托书大全
2014/04/04 职场文书
《学棋》教后反思
2014/04/14 职场文书
青年志愿者活动总结
2014/04/26 职场文书
新闻报道策划方案
2014/06/11 职场文书
整改报告格式
2014/11/06 职场文书
小学思品教学反思
2016/02/20 职场文书
2016年党员干部廉政承诺书
2016/03/24 职场文书
Python类方法总结讲解
2021/07/26 Python
python工具dtreeviz决策树可视化和模型可解释性
2022/03/03 Python