likes
comments
collection

vue-quill-editor 添加图片上传和缩放组件

作者站长头像
站长
· 阅读数 15

起因

最近测试同学测试富文本编辑器的时候发现数据库报错,我检查了一下发现,富文本在数据库中使用的是text类型,可以存 65535 ,一般的文案再多也不可能这么多吧。于是测试了一下前端后台界面,没想到前端坑死人,竟然把图片给我转成了 base64 传过来,那不超过最大长度才怪。

优化

肯定是不能怎么搞的,于是让前端给我改一下,没想到他居然说不能改,做不了,竟然还想骗我。 好吧,好歹我也是从前后端不分离的时代过来的,虽然前端布局啥的不会搞,简单的js语法还是懂的。 于是测试了好几个 quill 编辑器的插件,竟然没有一个好用,各种报错,比如 '# 'imports' of undefined','undefined (reading 'register')',又是改webpack.base.js,又是改vue.config.js,结果一个都没用。 浪费了一上午的时间,差点有点绝望了。

到了下午,灵机一动,翻看那几个用不了的插件 github 问题(issue)列表,发现有人发了自己写的新版组件,大喜。

于是测试了一下,完美。yarn add quill-image-super-solution-module quill-resize-module 具体用法见文档,非常清晰,这个后端都能搞定。

  • 上传组件 支持文件框、粘贴、拖动三种上传方式
  • 缩放组件 支持图片的大小缩放和移动位置

图片删除

另外图片删除后需要调用后端接口同步删除,这里可以监听一下编辑器里的文本变化事件 代码如下:

editor.on('text-change', (delta, oldContents, source) => {
  if (source !== 'user') return;

  const inserted = getImgUrls(delta);
  const deleted = getImgUrls(editor.getContents().diff(oldContents));
  inserted.length && console.log('insert', inserted)
  deleted.length && console.log('delete', deleted)
});

function getImgUrls(delta) {
  return delta.ops.filter(i => i.insert && i.insert.image).map(i => i.insert.image);
}

总结

  1. 对于后端程序员来说,还是需要懂一些前端,一方面前后端要协调,少不了要知道一些前端知识;另外一方面,可以解决某些前端认为不能解决的问题。
  2. 组件不更新后的解决办法,看 github issue 列表。
  3. 尽量不要用那些没有维护的组件吧,也不知道我们这边的前端怎么选的。