vue-quill-editor上传图片vue3

编辑器配置图片上传,调用后端接口服务

看代码

复制代码
<quill-editor ref="quilRef" v-model:content="form.pushContent2" :options="editorOption"
                                    contentType="html" />


//隐藏上传图片
<input type="file" ref="fileInput" accept="image/*" style="display: none" @change="handleFileChange">






js部分



<script lang="ts" setup>
import axios from 'axios'
import { QuillEditor } from '@vueup/vue-quill';
import '@vueup/vue-quill/dist/vue-quill.snow.css'; // 引入样式文件

const fileInput = ref(null)
const uploadUrl = '你的上传接口路径'
const editorOption = {
    theme: 'snow',
    modules: {
        history: {
            delay: 0,
            maxStack: 0
        },
        toolbar: {
            container: [
                [{ 'size': ['small', false, 'large'] }],
                [{ 'color': [] }],
                [{ 'list': 'bullet' }],
                ['bold', 'italic', 'underline'],
                ['image', 'link']
            ],
            handlers: {
                image: () => fileInput.value.click()
            }
        }
    },// 自定义编辑器内的空白处理样式
    customOptions: {
        whitespace: 'pre-wrap'
    }
};

//上传图片
const handleFileChange = async (e) => {
    const file = e.target.files[0]
    if (!file) return

    try {
        const formData = new FormData()
        formData.append('file', file)
        formData.append('prefix', 'image')

        const res = await axios.post(uploadUrl, formData, {
            headers: { 'Content-Type': 'multipart/form-data' }
        })
        if (res.data.url) {
            insertImage(res.data.url)
        }
    } catch (error) {
        console.error('Upload failed:', error)
    } finally {
        e.target.value = '' // 重置input
    }
}
//向富文本插入图片
const insertImage = (url) => {
  const quill = quilRef.value.getQuill()
  const range = quill.getSelection()
  quill.insertEmbed(range.index, 'image', url)
  quill.setSelection(range.index + 1)
}
</script>
相关推荐
LucianaiB4 小时前
【元宝搜索开发者征文大赛】AI时代,学得慢就不用学?用元宝搜索打造一个教程保质期,确保每一个教程符合你的现状
前端·人工智能·ai编程
excel4 小时前
JavaScript 对象池:减少高频对象创建与 GC 压力
前端
陈随易6 小时前
纯 Go 写的 JS 引擎,跑分超过了 C 语言的 QuickJS
前端·后端·程序员
子兮曰7 小时前
Chrome 权限元素实战:144 与 151 的渐进增强写法
前端·javascript·chrome
IT_陈寒8 小时前
Redis连接池泄漏那次,我差点把生产环境搞崩了
前端·人工智能·后端
强尼银手8 小时前
我花一天做了个格斗游戏原型,判定全对,然后被「美术」劝退了
前端·javascript
石小石Orz8 小时前
AI 正在蚕食我们的编码能力
前端·后端·算法
陈随易9 小时前
专注飞机 FocusFlight,两个人把番茄钟做成了一趟航班
前端·后端·程序员
总要学点什么9 小时前
第98篇:三维特效-材质线效果——给一条线换十种材质,虚线的图案只填了一半
开发语言·前端·javascript·ecmascript·gis·webgl·材质
10share9 小时前
基于大模型的 i18n 方案:把中文原文当 Key,轻松搞定多语言维护
前端·vue.js