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 相关文章推荐
快速解决vue2+vue-cli3项目ie兼容的问题
Nov 17 Vue.js
详解Vue的mixin策略
Nov 19 Vue.js
如何使用 vue-cli 创建模板项目
Nov 19 Vue.js
详解vue-cli项目在IE浏览器打开报错解决方法
Dec 10 Vue.js
vue绑定class的三种方法
Dec 24 Vue.js
vuex的使用步骤
Jan 06 Vue.js
vue实现轮播图帧率播放
Jan 26 Vue.js
vue浏览器返回监听的具体步骤
Feb 03 Vue.js
Vue过滤器(filter)实现及应用场景详解
Jun 15 Vue.js
Vue elementUI表单嵌套表格并对每行进行校验详解
Feb 18 Vue.js
vue route新窗口跳转页面并且携带与接收参数
Apr 10 Vue.js
vue使用watch监听属性变化
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
php miniBB中文乱码问题解决方法
2008/11/25 PHP
php使用str_replace实现输入框回车替换br的方法
2014/11/24 PHP
PHP实现删除字符串中任何字符的函数
2015/08/11 PHP
详解php魔术方法(Magic methods)的使用方法
2016/02/14 PHP
解决出现SoapFault (looks like we got no XML document)的问题
2017/06/24 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
2020/06/03 PHP
javascript中的location用法简单介绍
2007/03/07 Javascript
JS与jQuery遍历Table所有单元格内容的方法
2015/12/07 Javascript
适用于javascript开发者的Processing.js入门教程
2016/02/24 Javascript
JavaScript核心语法总结(推荐)
2016/06/02 Javascript
从零学习node.js之文件操作(三)
2017/02/21 Javascript
搭建简单的nodejs http服务器详解
2017/03/09 NodeJs
详解webpack分离css单独打包
2017/06/21 Javascript
JavaScript 中的12种循环遍历方法【总结】
2018/05/31 Javascript
JavaScript的词法结构精华篇
2018/10/17 Javascript
JavaScript显式数据类型转换详解
2019/03/18 Javascript
在vue中使用G2图表的示例代码
2019/03/19 Javascript
vue设计一个倒计时秒杀的组件详解
2019/04/06 Javascript
VUE子组件向父组件传值详解(含传多值及添加额外参数场景)
2020/09/01 Javascript
Python实现中文数字转换为阿拉伯数字的方法示例
2017/05/26 Python
Python 记录日志的灵活性和可配置性介绍
2018/02/27 Python
python自动登录12306并自动点击验证码完成登录的实现源代码
2018/04/25 Python
Python requests库用法实例详解
2018/08/14 Python
python打开使用的方法
2019/09/30 Python
基于pytorch padding=SAME的解决方式
2020/02/18 Python
详解Python 函数参数的拆解
2020/09/02 Python
Python使用xpath实现图片爬取
2020/09/16 Python
python实现图片素描效果
2020/09/26 Python
HTML5学习笔记之html5与传统html区别
2016/01/06 HTML / CSS
经济管理专业毕业生自荐信范文
2014/01/02 职场文书
公司成本主管岗位责任制
2014/02/21 职场文书
优秀班主任经验交流材料
2014/06/02 职场文书
技术经济专业求职信
2014/09/03 职场文书
党支部党的群众路线对照检查材料
2014/09/24 职场文书
个人总结与自我评价
2015/02/14 职场文书
Mysql数据库索引面试题(程序员基础技能)
2021/05/31 MySQL