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+Element实现增删改查的示例源码
Nov 23 Vue.js
浅谈Vue使用Elementui修改默认的最快方法
Dec 05 Vue.js
全面解析Vue中的$nextTick
Dec 24 Vue.js
详解Vue2的diff算法
Jan 06 Vue.js
vue组件是如何解析及渲染的?
Jan 13 Vue.js
vue+django实现下载文件的示例
Mar 24 Vue.js
vue首次渲染全过程
Apr 21 Vue.js
vue如何批量引入组件、注册和使用详解
May 12 Vue.js
SSM VUE Axios详解
Oct 05 Vue.js
详解gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
Nov 27 Vue.js
Vue2.0搭建脚手架
Mar 13 Vue.js
vue css 相对路径导入问题级踩坑记录
Jun 05 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 定界符 使用技巧
2009/06/14 PHP
php程序之die调试法 快速解决错误
2009/09/17 PHP
基于php无限分类的深入理解
2013/06/02 PHP
ThinkPHP写数组插入与获取最新插入数据ID实例
2014/11/03 PHP
PHP扩展模块memcached长连接使用方法分析
2014/12/24 PHP
php设计模式之单例模式实例分析
2015/02/25 PHP
浅析Yii2缓存的使用
2016/05/10 PHP
php实现解析xml并生成sql语句的方法
2018/02/03 PHP
PHP使用file_get_contents发送http请求功能简单示例
2018/04/29 PHP
php中Swoole的热更新实现代码实例
2021/03/04 PHP
javascript脚本编程解决考试分数统计问题
2008/10/18 Javascript
JavaScript 5 新增 Array 方法实现介绍
2012/02/06 Javascript
js判断图片加载完成后获取图片实际宽高的方法
2016/02/25 Javascript
JS设置手机验证码60s等待实现代码
2017/06/14 Javascript
vue 运用mock数据的示例代码
2017/11/07 Javascript
Angular实现点击按钮控制隐藏和显示功能示例
2017/12/29 Javascript
详解vue 计算属性与方法跟侦听器区别(面试考点)
2018/04/23 Javascript
深入剖析JavaScript instanceof 运算符
2019/06/14 Javascript
微信小程序页面调用自定义组件内的事件详解
2019/09/12 Javascript
Echarts地图添加引导线效果(labelLine)
2019/09/30 Javascript
vue解决花括号数据绑定不成功的问题
2019/10/30 Javascript
[01:31]DOTA2上海特级锦标赛 SECRET战队完整宣传片
2016/03/16 DOTA
Python爬虫包BeautifulSoup简介与安装(一)
2018/06/17 Python
对python修改xml文件的节点值方法详解
2018/12/24 Python
使用pandas 将DataFrame转化成dict
2019/12/10 Python
CSS3媒体查询(Media Queries)介绍
2013/09/12 HTML / CSS
德国团购网站:Groupon德国
2018/03/13 全球购物
英国Office鞋店德国网站:在线购买鞋子、靴子和运动鞋
2018/12/19 全球购物
优秀的毕业生的自我评价
2013/12/12 职场文书
面试后感谢信
2014/02/01 职场文书
《小猫刮胡子》教学反思
2014/02/21 职场文书
给校长的建议书
2014/03/12 职场文书
纪律教育月活动总结
2014/08/26 职场文书
单位法人授权委托书范本
2014/10/09 职场文书
使用logback实现按自己的需求打印日志到自定义的文件里
2021/08/30 Java/Android
教你利用Nginx 服务搭建子域环境提升二维地图加载性能的步骤
2021/09/25 Servers