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中使用Echarts可视化库的完整步骤记录
Nov 18 Vue.js
vue3.0实现点击切换验证码(组件)及校验
Nov 18 Vue.js
用vue设计一个日历表
Dec 03 Vue.js
利用Vue实现简易播放器的完整代码
Dec 30 Vue.js
Vue实现圆环进度条的示例
Feb 06 Vue.js
vue 数据双向绑定的实现方法
Mar 04 Vue.js
Vue3 Composition API的使用简介
Mar 29 Vue.js
Vue实现下拉加载更多
May 09 Vue.js
详解Vue的列表渲染
Nov 20 Vue.js
vue实现拖拽交换位置
Apr 07 Vue.js
vue实现列表拖拽排序的示例代码
Apr 08 Vue.js
vue实现input输入模糊查询的三种方式
Aug 14 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
BBS(php &amp; mysql)完整版(四)
2006/10/09 PHP
php打印输出棋盘的实现方法
2014/12/23 PHP
PHP常用工具类大全附全部代码下载
2015/12/07 PHP
jQuery ui插件的使用方法代码实例
2013/05/08 Javascript
js获取checkbox复选框选中的选项实例
2014/08/24 Javascript
js中数组排序sort方法的原理分析
2014/11/20 Javascript
node.js解决获取图片真实文件类型的问题
2014/12/20 Javascript
浅谈JavaScript字符串拼接
2015/06/25 Javascript
javascript创建动态表单的方法
2015/07/25 Javascript
学习JavaScript设计模式(策略模式)
2015/11/26 Javascript
纯css下拉菜单 无需js
2016/08/15 Javascript
微信小程序图片宽100%显示并且不变形
2017/06/21 Javascript
webpack3+React 的配置全解
2017/08/21 Javascript
checkbox:click事件触发span元素内容改变的方法
2017/09/11 Javascript
vue自定v-model实现表单数据双向绑定问题
2018/09/03 Javascript
微信小程序 导入图标实现过程详解
2019/10/11 Javascript
elementui更改el-dialog关闭按钮的图标d的示例代码
2020/08/04 Javascript
[01:48]DOTA2 2015国际邀请赛中国区预选赛第二日战报
2015/05/27 DOTA
Python3中多线程编程的队列运作示例
2015/04/16 Python
Python中subprocess的简单使用示例
2015/07/28 Python
Python 调用Java实例详解
2017/06/02 Python
Python连接phoenix的方法示例
2017/09/29 Python
python中文分词,使用结巴分词对python进行分词(实例讲解)
2017/11/14 Python
python清理子进程机制剖析
2017/11/23 Python
python实现百万答题自动百度搜索答案
2018/01/16 Python
解决Pycharm中import时无法识别自己写的程序方法
2018/05/18 Python
详解Django的CSRF认证实现
2018/10/09 Python
通过实例解析Python调用json模块
2019/12/11 Python
Python3+selenium实现cookie免密登录的示例代码
2020/03/18 Python
Python中的wordcloud库安装问题及解决方法
2020/05/27 Python
python 读取串口数据的示例
2020/11/09 Python
Oakley官网:运动太阳镜、雪镜和服装
2016/09/30 全球购物
法国体育用品商店:GO Sport
2019/10/23 全球购物
Madda Fella官网:美国冒险家服装品牌
2020/01/16 全球购物
环境工程专业个人求职信
2013/12/05 职场文书
森林防火工作方案
2014/02/14 职场文书