antd pro中vue-quilleditor富文本编辑器,重写非base64图片上传方法

工作需要用到富文本编辑器,antdpro自带的有两个富文本编辑器,我用的是quilleditor。在上传图片的时候,图片是默认以base64格式上传的,无论是上传还是请求都非常费时,体验极差。于是想要解决这个问题,发现很多人都选择重写上传方法。
但是antd的a-upload有一个隐藏的问题
先贴上重写的方法代码

//html就是一个朴实无华的上传组件,自定义了一下upload事件
<template>
  <div :class="prefixCls">
    <a-upload list-type="picture" v-show="false" :customRequest="uploadimg">
      <a-button> <a-icon type="upload" /> upload </a-button>
    </a-upload>

    <quill-editor
      v-model="content"
      ref="myQuillEditor"
      :options="editorOption"
      @blur="onEditorBlur($event)"
      @focus="onEditorFocus($event)"
      @ready="onEditorReady($event)"
      @change="onEditorChange($event)"
    >
    </quill-editor>
  </div>
</template>
//由于需要重写tabbar 中header图片的上传事件,图片重写又在tabbar中,没办法只能重新定义工具栏
modules: {
          toolbar: {
            container: [
              // 工具栏配置
              ['bold'],
              ['italic'],
              ['underline'],
              ['strike'],
              [{ header: 1 }, { header: 2 }],
              [{ list: 'ordered' }, { list: 'bullet' }],
              [{ align: [] }],
              [{ header: [1, 2, 3, 4, 5, 6, !1] }],
              //    ['blockquote'], ['code-block'],//不需要的可以干掉
              ['image'],
              [{ list: 'ordered' }, { list: 'bullet' }],
              [{ direction: 'rtl' }]
            ],
            handlers: {
              image: function(value) {
                if (value) {
                  // 获取到antd的upload框选择图片的弹出框事件并触发一次点击
                  document.querySelector('.ant-upload .ant-btn').click()
                } else {
                //禁用quill自带的image时间
                  this.quill.format('image', false)
                }
              }
            }
          }
        }
 uploadimg(data) {
      const formData = new FormData()
      formData.append('file', data.file)
      console.log(formData)
      uploadimg(formData).then(res => {
        data.onSuccess(res, data.file)
        this.url = res.url
        //console.log(this.url)
		//以上是普通的上传方法代码,吧后台返回的url拿到就行了
		
		//这一步是获取quilleditor的实例
        let quill = this.$refs.myQuillEditor.quill
        
        // 获取光标所在位置
        let length = quill.getSelection().index
        if (res) {
          console.log(length)
          // 插入图片  res为服务器返回的图片地址
          quill.insertEmbed(length, 'image', this.url)
          // 调整光标到最后
          quill.setSelection(length + 1)
          this.$message.success('上传成功')
        } else if (res.file.status === 'error') {
          this.$message.error('图片插入失败')
        }
      })
    },

自此,重写的图片上传方法就完成了。
注意,我之前提到了一个隐藏的问题
刚开始我是把 获取光标以下的代码写在了a-upload组件的change方法里,但是后来发现每次都会触发两次change,百思不得其解,仔细读了文档发现,上传和完成,失败都会触发change回调,这才反应过来我的这些代码应该写在uploadimg方法里。果断吧@change删掉,恶心了我一天,吐了在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值