Tiptap 中如何自定义图片上传逻辑?
我用 Tiptap 做富文本编辑器,想替换默认的图片插入方式,改成上传到自己的服务器。但文档里没找到清晰的例子,试了扩展 Image 节点也不生效。
现在点插入图片还是直接贴 URL,我想改成弹出文件选择框,然后走 axios.post('/upload') 上传。有谁搞过类似的吗?
import { Editor } from '@tiptap/vue-3'
import Image from '@tiptap/extension-image'
const editor = new Editor({
extensions: [
Image.configure({
// 这里怎么拦截点击事件并触发上传?
})
]
})
最直接的做法是在编辑器外部搞个隐藏的 file input,然后通过自定义命令把上传后的 URL 插进去:
然后在模板里放个隐藏的 input 和触发按钮:
如果你想在编辑器内部点击某个按钮触发上传,可以在 Tiptap 的 bubble menu 或者 floating menu 里加,或者直接用 editor 暴露的命令:
还有个坑提醒你:Tiptap 2.x 的写法是
setImage,不是旧版本的setImage或者insertImage,别搞错了。如果你的后端还没搭好测试,可以先用
allowBase64: true然后直接读FileReader转成 base64 塞进去,先跑通流程再说。