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和CSS通过expression实现Table居中显示
Jun 28 Javascript
JavaScript中的toDateString()方法使用详解
Jun 12 Javascript
解决jquery插件:TypeError:$.browser is undefined报错的方法
Nov 21 Javascript
分享Javascript实用方法二
Dec 13 Javascript
探讨JavaScript标签位置的存放与功能有无关系
Jan 15 Javascript
angular.js之路由的选择方法
Sep 24 Javascript
jQuery 控制文本框自动缩小字体填充
Jun 16 jQuery
vue toggle做一个点击切换class(实例讲解)
Mar 13 Javascript
Vue源码探究之状态初始化
Nov 14 Javascript
小程序实现分类页
Jul 12 Javascript
node 文件上传接口的转发的实现
Sep 23 Javascript
vue中touch和click共存的解决方式
Jul 28 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
造势之举?韩国总统候选人发布《星际争霸》地图
2017/04/22 星际争霸
PHP新手上路(四)
2006/10/09 PHP
深入探究PHP的多进程编程方法
2015/08/18 PHP
解决微信授权回调页面域名只能设置一个的问题
2016/12/11 PHP
php取出数组单个值的方法
2018/03/12 PHP
php命名空间设计思想、用法与缺点分析
2019/07/17 PHP
javascript设计模式 封装和信息隐藏(上)
2012/07/24 Javascript
使用requestAnimationFrame实现js动画性能好
2015/08/06 Javascript
jQuery基于Ajax实现读取XML数据功能示例
2018/05/31 jQuery
vue项目实现表单登录页保存账号和密码到cookie功能
2018/08/31 Javascript
Angular4.x Event (DOM事件和自定义事件详解)
2018/10/09 Javascript
javascript中函数的写法实例代码详解
2018/10/28 Javascript
node.js命令行教程图文详解
2019/05/27 Javascript
Vue.js组件props数据验证实现详解
2019/10/19 Javascript
VUE解决 v-html不能触发点击事件的问题
2019/10/28 Javascript
编写Python脚本来获取Google搜索结果的示例
2015/05/04 Python
整理Python中的赋值运算符
2015/05/13 Python
在MAC上搭建python数据分析开发环境
2016/01/26 Python
Python 使用os.remove删除文件夹时报错的解决方法
2017/01/13 Python
Python实现基于二叉树存储结构的堆排序算法示例
2017/12/08 Python
python re正则匹配网页中图片url地址的方法
2018/12/20 Python
Python画图实现同一结点多个柱状图的示例
2019/07/07 Python
使用pyqt5 tablewidget 单元格设置正则表达式
2019/12/13 Python
在python3中使用shuffle函数要注意的地方
2020/02/28 Python
Python爬虫爬取杭州24时温度并展示操作示例
2020/03/27 Python
python中查看.db文件中表格的名字及表格中的字段操作
2020/07/07 Python
国际化的太阳镜及太阳镜配件零售商:Sunglass Hut
2016/07/26 全球购物
什么是组件架构
2016/05/15 面试题
遇到的Mysql的面试题
2014/06/29 面试题
骨干教师培训制度
2014/01/13 职场文书
公司总经理岗位职责
2014/03/15 职场文书
对孩子的寄语
2014/04/09 职场文书
难忘的一课教学反思
2014/04/30 职场文书
2016五一手机促销广告语
2016/01/28 职场文书
《弟子规》读后感:知廉耻、明是非、懂荣辱、辨善恶
2019/12/03 职场文书
详细分析PHP7与PHP5区别
2021/06/26 PHP