quillEditor 配置图片element自定义上传,包含粘贴图片和工具栏上传图片

本文主要关注粘贴图片上传,因为点击工具栏可以增加触发事件addHandler

一、标签部分:
<el-upload
    :action="photoUploadUrl"
    :show-file-list="false"
    :on-success="handleQuillImgSuccess"
    with-credentials
    accept="image/gif, image/jpeg, image/jpg, image/bmp, image/png"
    style="display: none"
    >
    <i id="imgInput" class="el-icon-plus avatar-uploader-icon" />
</el-upload>
<quill-editor ref="myQuillEditor" v-model="ruleForm.documentBody" :options="editorOption" />
二、脚本部分:附代码说明,就不在单独阐述

步骤:

  • 注册实例:
    在这里插入图片描述
  • 在mounted注册工具栏图片插入事件
    在这里插入图片描述
  • 执行图片触发事件
    在这里插入图片描述
  • 图片上传成功处理图片回显富文本
    在这里插入图片描述
  • 在mounted注册粘贴事件
    在这里插入图片描述

代码:

import { uploadFile } from "/api"
import { quillEditor } from "vue-quill-editor"
//......
data() {
	return {
		// 图片上传服务器地址
		photoUploadUrl: 'http:localhost:8089',
		// 存储富文本内容
		ruleForm: {
			documentBody: ''
		},
		// 富文本配置
		editorOption: {
			placeholder: '请输入内容'
		},
		// 光标位置对象
		addRange: null
	}
},
computed: {
	// quill富文本实例
	editor() {
		return this.$refs.myQuillEditor.quill
	}
},
mounted() {
	this.$nextTick(() => {
		// 增加富文本工具栏 图片 工具点击事件
        this.editor.getModule("toolbar").addHandler("image", this.imgHandler)
        //  自定义粘贴图片功能,粘贴触发
        this.editor.root.addEventListener('paste', evt => {
        	// 如果粘贴内容有文件进入判断
            if (evt.clipboardData && evt.clipboardData.files && evt.clipboardData.files.length) {
                evt.preventDefault();
                [].forEach.call(evt.clipboardData.files, file => {
                	// 判断文件是否为图片
                    if (!file.type.match(/^image\/(gif|jpe?g|a?png|bmp)/i)) {
                        return;
                    }
                    // 图片文件
                    const formData = new FormData()
                    formData.append('file', file)
                    // 通过下载接口参数传给上给传服务器
                    uploadFile(formData).then((res) => {
                    	// 获取光标对象
                        var range = this.editor.getSelection();
                        if (range) {
                            //  在当前光标位置插入图片
                            this.editor.insertEmbed(range.index, 'image', `myUrl/download?fileId=${res.data}`);
                            //  将光标移动到图片后面
                            this.editor.setSelection(range.index + 1);
                        }
                    });
                });
            }
        }, false);
    })
},
methods: {
	// 点击quill-editor图片ICON触发事件
    imgHandler(state) {
    	// 执行文本信息函数,如果有值,则addRange有值
        this.addRange = this.editor.getSelection()
        //通过点击触发的state为true
        if (state) {
            // 选择并上传一张图片
            // 获取上传组件
            const fileInput = document.getElementById("imgInput")
            // 点击触发上传事件
            fileInput.click()
        }
    },
    // quill-editor的图片上传成功事件
    handleQuillImgSuccess(response, file, fileList) {
        // 图片的远程路径
        // file.response.data存储上传成功返回的图片id
        const value = `baseUrl/download?fileId=${file.response.data}`
        // 获取光标位置对象
        this.addRange = this.editor.getSelection()
        // 调用编辑器的 insertEmbed 方法,插入图片URL到编辑器图片对应位置
        // 第一个参数index 光标位置索引
        this.editor.insertEmbed(
            this.addRange !== null ? this.addRange.index : 0,
            "image",
            value
        )
    }
}

以上就是quillEditor自定义图片上传相关功能,希望能帮到大家

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
首先,你需要在 vue-quill-editor 组件的配置项中添加一个自定义图片上传方法。你可以使用 element-ui 的上传组件来实现上传操作。 在 vue-quill-editor 组件中添加如下配置项: ```javascript <template> <quill-editor ... :options="editorOption" /> </template> <script> import { Upload } from 'element-ui'; export default { data() { return { editorOption: { modules: { toolbar: { ... handlers: { image: this.customImageHandler } } } } } }, methods: { customImageHandler() { const input = document.createElement('input'); input.setAttribute('type', 'file'); input.setAttribute('accept', 'image/*'); input.onchange = () => { const file = input.files[0]; const formData = new FormData(); formData.append('file', file); Upload.request({ url: 'your-upload-api-url', method: 'post', data: formData, headers: { Authorization: 'Bearer ' + localStorage.getItem('token') // 如果需要携带认证信息 } }).then(res => { const url = res.data.url; // 根据你的上传 API 返回的数据结构获取图片 URL const quill = this.$refs.quillEditor.quill; const range = quill.getSelection(true); quill.insertEmbed(range.index, 'image', url); quill.setSelection(range.index + 1); }); }; input.click(); } } } </script> ``` 在上述代码中,我们使用 `handlers` 配置项来添加自定义图片上传操作,即 `customImageHandler` 方法。该方法会创建一个 `input` 标签来触发文件选择框,用户选择图片后,使用 element-ui 的上传组件来上传图片,并根据上传结果在编辑器中插入图片。 需要注意的是,你需要根据你的实际情况修改上传 API 的 URL,以及上传成功后返回的图片 URL 在响应数据中的字段名。另外,如果你的上传 API 需要携带认证信息,可以在请求头中添加相应的信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值