vue-quill-editor上传内容由于图片是base64的导致字符太长的问题解决,把vue-quill-editor封装成组件

vue-quill-editor是个较为轻量级富文本框,相较于ueditor,开发更编辑,更加直观,如果大家伙在需求允许的情况下,还是会比较建议使用vue-quill-editor

vue-quill-editor的使用方法在这边就不多说了,大家网上查下,一抓一大把

但是在使用vue-quill-editor有一个致命的问题,vue-quill-editor默认插入图片是直接将图片转为base64再放入内容中,如果图片比较大的话,富文本的内容就会很大,即使图片不大,只要图片较为多,篇幅较长,富文本的内容也是异常的大的,

这就会给大家带来一些烦恼,我们可能更希望在提交富文本的内容的时候图片只是以图片地址提交,那这样一来我们要怎么去处理呢,接下来大家可以来理一理

还是老思路,既然我们可以希望不是直接将图片转成base64,那么我们可以采用选择完图片,即将图片上传服务器,服务器返回相应的图片链接,前端将图片链接插入到富文本的指定光标上即可,这样一来就可以实现我们的想要的效果了
这边我把veu-quill-editor封装成一个组件,下面上代码

<template>
  <div>
    <el-upload
            :headers="getHeader" //token
            :with-credentials='true' //是否启用session
            :multiple="multiple" //多选
            :limit='limit' // 数量
            class="quill-upload"
            :action="serviceUrl" // 后台接收接口
            style="display: none;width:0"
            :show-file-list="false"
            :on-success="success"
            :before-upload="beforeAvatarUpload" //文件上传之前做校验
    >
      <!-- <el-button size="small" type="primary">点击上传</el-button> -->
      <i class="el-icon-upload"></i>
      <div class="el-upload__text">
        将文件拖到此处,或
        <em>点击上传</em>
      </div>
      <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
    </el-upload>
    <quill-editor
            ref="myQuillEditor"
            :content = 'content'
            v-model="editorData"
            :options="editorOption"></quill-editor>
  </div>
</template>
<script>
  import 'quill/dist/quill.core.css';
  import 'quill/dist/quill.snow.css';
  import 'quill/dist/quill.bubble.css';
  import {quillEditor, Quill} from 'vue-quill-editor'
  export default {
    name: "editor",
    components: {quillEditor},
    props: ['serviceUrl','getHeader','content','limit','multiple'],
    data() {
      // 富文本配置
      const toolbarOptions = [
        ['bold', 'italic', 'underline', 'strike'], // toggled buttons
        ['blockquote', 'code-block'],

        [{ header: 1 }, { header: 2 }], // custom button values
        [{ list: 'ordered' }, { list: 'bullet' }],
        [{ script: 'sub' }, { script: 'super' }], // superscript/subscript
        [{ indent: '-1' }, { indent: '+1' }], // outdent/indent
        [{ direction: 'rtl' }], // text direction

        [{ size: ['small', false, 'large', 'huge'] }], // custom dropdown
        [{ header: [1, 2, 3, 4, 5, 6, false] }],

        [{ color: [] }, { background: [] }], // dropdown with defaults from theme
        [{ font: [] }],
        [{ align: [] }],
        ['image'],
        ['clean'] // remove formatting button
      ]
      return {
        editorOption: {
          placeholder:'请输入内容',
          modules: {
            toolbar: {
              container: toolbarOptions,
              handlers: {
                // 重写点击组件上的图片按钮要执行的代码
                'image': function (value) {
                  document.querySelector('.quill-upload .el-icon-upload').click()
                }
              }
            }

          }
        },
        editorData:''
      }
    },
    methods: {
      beforeAvatarUpload(file) {
        this.$emit('beforeAvatarUpload',file)
      },
      success(res,file,fileList){
        // res为图片服务器返回的数据
        // 获取富文本组件实例
        let vm = this
        let quill = this.$refs.myQuillEditor.quill
        // 如果上传成功
        if (res.code === '1') {
          // 获取光标所在位置
          const pos=quill.selection.savedRange.index //这个得注意下,网上很多都是不对的
          // 插入图片到光标位置
          quill.insertEmbed(pos,'image',res.data[0].url)
          // 调整光标到最后
          quill.setSelection(length + 1)
        } else {
          vm.$Message.error('图片插入失败')
        }
        // loading动画消失
        this.quillUpdateImg = false
      },
    },
    watch: {
      serviceUrl(val){
        this.serviceUrl = val
      },
      getHeader(val){
        this.getHeader = val
      },
      editorData(val){
        this.$emit('getEditorData',this.editorData)
      },
      content(val){
        this.content =val
      }
    }
  }
</script>
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值