VueQuillEditor富文本上传图片(非base64)


Posted in Javascript onJune 03, 2020

前言

本篇文章将介绍vue-quill-editor上传图片的那些事,通常来说,我们数据库内都是保存图片路径的,所以上传完图片之后,要回传一个路径给前端,这才是完整的上传步骤。
第一步:上传图片,第二步:保存到服务器,并且生成路径保存到数据库,第三步:回传前端,后台图片路径,前端显示图片。

本文中使用了element-ui框架来帮助我完成前端展示工作。

上传图片

上传图片也有几种方式,比如直接使用file控件上传到指定地址,又或者是借助封装好的上传按钮上传图片,如果是base64传到后台,还需要转回图片原格式加以保存,如果是二进制图片流则直接传到服务器即可。
我使用的是element-ui框架里的el-upload组件进行上传,而且这个组件是隐藏的,不会显示出来

<el-upload
      class="avatar-uploader"
      :action="articleImgUrl"
      name="img"
      :headers="headerObj"
      :show-file-list="false"
      :on-success="uploadSuccess"
      :on-error="uploadError"
      :before-upload="beforeUpload">
      </el-upload>

上述参数解释:
(1)class 上传组件的样式,也可以用于查找该组件
(2)action 传值,必选参数,上传的地址
(3)name 上传文件字段名,后端在获取文件时需要起一个名字,这个名字就在这里定义
(4)headers 设置上传的请求头部
(5) show-file-list 是否显示已上传文件列表,这里不显示
(6) on-success 文件上传成功时的钩子,如果成功,则回传图片地址,显示图片将src传入地址
(7) on-error 文件上传失败时的钩子
(8)before-upload 上传文件之前的钩子,参数为上传的文件,若返回 false 或者返回 Promise 且被 reject,则停止上传。

我首先需要监听富文本点击上传图片按钮的事件:

VueQuillEditor富文本上传图片(非base64)

VueQuillEditor富文本上传图片(非base64)

editorOption: {
    scrollingContainer: '#editorcontainer',
    placeholder: '',
    // or 'bubble'
    theme: 'snow',
    modules: {
     imageResize: {
      displayStyles: {
       backgroundColor: 'black',
       border: 'none',
       color: 'white'
      },
      modules: ['Resize', 'DisplaySize', 'Toolbar']
     },
     toolbar: {
      // 工具栏
      container: toolbarOptions.toolbarOptions,
      handlers: {
       'image': function (value) {
        if (value) {
         // upload点击上传事件
         document.querySelector('.avatar-uploader input').click()
        } else {
         this.quill.format('image', false)
        }
       }
      }
     }
    }
   },

上面代码当中toolbar里的handlers就是监听点击图片按钮事件,然后我们模拟点击el-upload组件,就会弹出选择文件的框,我们开始选择文件进行上传。

当后端处理好图片后,我们拿到回传的地址,在富文本光标处插入img标签

VueQuillEditor富文本上传图片(非base64)

VueQuillEditor富文本上传图片(非base64)

VueQuillEditor富文本上传图片(非base64)

// 上传成功
  uploadSuccess(res) {
   var dt = res.result
   let quill = this.$refs.myQuillEditor.quill
   // 如果上传成功
   if (dt.meta.status === this.GLB.IMAGE_ADD_SUCCESS && dt.url !== null) {
    // 获取光标所在位置
    let length = quill.getSelection().index
    // 插入图片 dt.url为服务器返回的图片地址
    quill.insertEmbed(length, 'image', this.glAPI + dt.url)
    // 调整光标到最后
    quill.setSelection(length + 1)
   } else {
    this.$message.error('图片插入失败')
   }
   // loading加载隐藏
   this.quillUpdateImg = false
  },

VueQuillEditor富文本上传图片(非base64)

如果小伙伴喜欢原生标签使用input标签file类型也是可以的,或者也可以借助JavaScript或者jQuery响应点击事件来传文件也是可以哒!

总结

上传图片其实是一个很简单的过程,但是却需要前后端来配合食用,味道才正宗。所以只学前端的小伙伴可以找个后端开发写个接口啥的帮你回传一个地址,或者干脆自己造个假的也行。

我一开始不是很清楚图片到底怎么传的,比如base64是什么,其实就是照片的一串字符串,这一串字符串就是照片,有的时候是可能存在把这一串base64字符串保存到数据库的。但是大多数情况我们还是在数据库中保存路径,所以很多想保存图片路径的小伙伴们,可以参考上述代码,下一篇我将结合Java来展示图片保存的代码是怎样实现的,又是怎样回传图片地址的,敬请期待吧!!

到此这篇关于VueQuillEditor富文本上传图片(非base64)的文章就介绍到这了,更多相关VueQuillEditor富文本上传图片内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript中的私有成员
Sep 18 Javascript
用JavaScript脚本实现Web页面信息交互
Dec 21 Javascript
说说掌握JavaScript语言的思想前提想学习js的朋友可以看看
Apr 01 Javascript
Notify - 基于jquery的消息通知插件
Oct 18 Javascript
JQuery获取或设置ckeditor的数据(示例代码)
Nov 15 Javascript
jQuery弹出窗口打开链接的实现代码
Dec 24 Javascript
移动端web滚动分页的实现方法
May 05 Javascript
基于VUE.JS的移动端框架Mint UI的使用
Oct 11 Javascript
Vue.set()实现数据动态响应的方法
Feb 07 Javascript
layui 设置table 行的高度方法
Aug 17 Javascript
JavaScript实现拖拽功能
Feb 11 Javascript
微信小程序利用button控制条件标签的变量问题
Mar 15 Javascript
微信小程序文章列表功能完整实例
Jun 03 #Javascript
Angular8 简单表单验证的实现示例
Jun 03 #Javascript
JS实现前端动态分页码代码实例
Jun 02 #Javascript
在Vue中创建可重用的 Transition的方法
Jun 02 #Javascript
jQuery+Ajax+js实现请求json格式数据并渲染到html页面操作示例
Jun 02 #jQuery
2020淘宝618理想生活列车自动领喵币js脚本的代码
Jun 02 #Javascript
JavaScript实现手机号码 3-4-4格式并控制新增和删除时光标的位置
Jun 02 #Javascript
You might like
PHP GD 图像处理组件的常用函数总结
2010/04/28 PHP
JpGraph php柱状图使用介绍
2011/08/23 PHP
基于jQuery的投票系统显示结果插件
2011/08/12 Javascript
js对象转json数组的简单实现案例
2014/02/28 Javascript
JavaScript中输出信息的方法(信息确认框-提示输入框-文档流输出)
2016/06/12 Javascript
浅谈js在html中的加载执行顺序,多个jquery ready执行顺序
2016/11/26 Javascript
BootStrap实现带关闭按钮功能
2017/02/15 Javascript
如何使用bootstrap框架 bootstrap入门必看!
2017/04/13 Javascript
Node.js+ES6+dropload.js实现移动端下拉加载实例
2017/06/01 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
2020/03/28 Javascript
vue监听scroll的坑的解决方法
2017/09/07 Javascript
layui 图片上传+表单提交+ Spring MVC的实例
2019/09/21 Javascript
python选择排序算法的实现代码
2013/11/21 Python
在Python中用split()方法分割字符串的使用介绍
2015/05/20 Python
基于wxpython实现的windows GUI程序实例
2015/05/30 Python
浅谈python中scipy.misc.logsumexp函数的运用场景
2016/06/23 Python
无法使用pip命令安装python第三方库的原因及解决方法
2018/06/12 Python
python3+selenium实现qq邮箱登陆并发送邮件功能
2019/01/23 Python
Python实现多态、协议和鸭子类型的代码详解
2019/05/05 Python
python实现控制COM口的示例
2019/07/03 Python
python将字符串转换成json的方法小结
2019/07/09 Python
python爬虫之快速对js内容进行破解
2019/07/09 Python
Django对接支付宝实现支付宝充值金币功能示例
2019/12/17 Python
Tkinter中复选菜单是否被选中的判断与设置方式
2020/03/04 Python
Python 绘制可视化折线图
2020/07/22 Python
美国酒店控股公司:Choice Hotels
2018/06/15 全球购物
Made in Design英国:设计家具、照明、家庭装饰和花园家具
2019/09/24 全球购物
实习老师个人总结的自我评价
2013/09/28 职场文书
《在家里》教后反思
2014/03/01 职场文书
航海技术专业毕业生求职信
2014/04/06 职场文书
2014年派出所工作总结
2014/11/21 职场文书
销售经理助理岗位职责
2015/04/13 职场文书
2015年学校减负工作总结
2015/05/19 职场文书
致青春观后感
2015/06/09 职场文书
就业证明函
2015/06/17 职场文书
html中相对位置与绝对位置的具体使用
2022/05/15 HTML / CSS