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 相关文章推荐
Vue3 实现双盒子定位Overlay的示例
Dec 22 Vue.js
vue 动态创建组件的两种方法
Dec 31 Vue.js
vue中使用echarts的示例
Jan 03 Vue.js
通过vue.extend实现消息提示弹框的方法记录
Jan 07 Vue.js
Vue项目中使用mock.js的完整步骤
Jan 12 Vue.js
vue3.0中使用element的完整步骤
Mar 04 Vue.js
Vue项目中如何封装axios(统一管理http请求)
May 02 Vue.js
vue组件的路由高亮问题解决方法
May 11 Vue.js
一篇文章学会Vue中间件管道
Jun 20 Vue.js
前端vue+express实现文件的上传下载示例
Feb 18 Vue.js
三种方式清除vue路由跳转router-link的历史记录
Apr 10 Vue.js
vue如何清除浏览器历史栈
May 25 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
ThinkPHP标签制作教程
2014/07/10 PHP
php中判断数组相等的方法以及数组运算符介绍
2015/03/30 PHP
php实现的http请求封装示例
2016/11/08 PHP
TP3.2.3框架文件上传操作实例详解
2020/01/23 PHP
仿迅雷焦点广告效果(JQuery版)
2008/11/19 Javascript
JavaScript 撑出页面文字换行
2009/06/15 Javascript
jquery入门—访问DOM对象方法
2013/01/07 Javascript
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
js设置function参数默认值(适合没有传参情况)
2014/02/24 Javascript
Javascript遍历Html Table示例(包括内容和属性值)
2014/07/08 Javascript
jQuery设置和获取HTML、文本和值示例
2014/07/08 Javascript
浅谈javascript的Touch事件
2015/09/27 Javascript
详解AngularJS实现表单验证
2015/12/10 Javascript
KnockoutJS 3.X API 第四章之click绑定
2016/10/10 Javascript
javascript实现动态显示颜色块的报表效果
2017/04/10 Javascript
vue-image-crop基于Vue的移动端图片裁剪组件示例
2018/08/28 Javascript
用webpack4开发小程序的实现方法
2019/06/04 Javascript
JS中自定义事件的使用与触发操作实例分析
2019/11/01 Javascript
vue+elementUI 实现内容区域高度自适应的示例
2020/09/26 Javascript
[02:32]DOTA2英雄基础教程 美杜莎
2014/01/07 DOTA
[02:34]2016完美“圣”典风云人物:BurNIng专访
2016/12/10 DOTA
Python数据类型详解(一)字符串
2016/05/08 Python
使用Python和百度语音识别生成视频字幕的实现
2020/04/09 Python
使用HTML5中的contentEditable来将多行文本自动增高
2016/03/01 HTML / CSS
Html5新增标签有哪些
2017/04/13 HTML / CSS
KOHLER科勒美国官网:国际著名卫浴橱柜领先品牌
2020/06/27 全球购物
酒店管理专业毕业生推荐信
2013/11/10 职场文书
xxx同志考察材料
2014/02/07 职场文书
2014年商场超市庆元旦活动方案
2014/02/14 职场文书
《邮票齿孔的故事》教学反思
2014/02/22 职场文书
珍惜水资源建议书
2014/03/12 职场文书
公务员试用期满考核材料
2014/05/22 职场文书
2014年社区民政工作总结
2014/12/02 职场文书
详解TypeScript中的类型保护
2021/04/29 Javascript
JavaScript实例 ODO List分析
2022/01/22 Javascript
python实现学员管理系统(面向对象版)
2022/06/05 Python