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 相关文章推荐
ie7+背景透明文字不透明超级简单的实现方法
Jan 17 Javascript
jQuery时间轴插件使用详解
Jul 16 Javascript
jQuery仿360导航页图标拖动排序效果代码分享
Aug 24 Javascript
jQuery焦点图轮播插件KinSlideshow用法分析
Jun 08 Javascript
Javascript基础_标记文字的实现方法
Jun 14 Javascript
AngularJS基于ui-route实现深层路由的方法【路由嵌套】
Dec 14 Javascript
JavaScript中定义对象原型的两种使用方法
Dec 15 Javascript
JavaScript中校验银行卡号的实现代码
Dec 19 Javascript
微信小程序 表单Form实例详解(附源码)
Dec 22 Javascript
js获取浏览器的各种属性
Apr 27 Javascript
js类的继承定义与用法分析
Jun 21 Javascript
小程序实现长按保存图片的方法
Dec 31 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 XML备份Mysql数据库
2009/05/27 PHP
php类常量用法实例分析
2015/07/09 PHP
PHP图形计数器程序显示网站用户浏览量
2016/07/20 PHP
PHP对象、模式与实践之高级特性分析
2016/12/08 PHP
浅谈javascript的数据类型检测
2010/07/10 Javascript
基于JQuery的asp.net树实现代码
2010/11/30 Javascript
JavaScript调用ajax获取文本文件内容实现代码
2014/03/28 Javascript
node.js中的fs.truncate方法使用说明
2014/12/15 Javascript
jQuery实现的手机发送验证码倒计时效果代码分享
2015/08/24 Javascript
原生js实现节日时间倒计时功能
2017/01/18 Javascript
JavaScript实现的原生态兼容IE6可调可控滚动文字功能详解
2017/09/19 Javascript
AngularJS 教程及实例代码
2017/10/23 Javascript
vue-cli 3.x 修改dist路径的方法
2018/09/19 Javascript
纯javascript实现选择框的全选与反选功能
2019/04/08 Javascript
生产制造追溯系统之再说条码打印
2019/06/03 Javascript
Vue函数式组件的应用实例详解
2019/08/30 Javascript
CountUp.js数字滚动插件使用方法详解
2019/10/17 Javascript
python实现二分查找算法
2017/09/21 Python
解决Python3.5+OpenCV3.2读取图像的问题
2018/12/05 Python
python爬虫selenium和phantomJs使用方法解析
2019/08/08 Python
用Python画一个LinkinPark的logo代码实例
2019/09/10 Python
使用NumPy读取MNIST数据的实现代码示例
2019/11/20 Python
利用pytorch实现对CIFAR-10数据集的分类
2020/01/14 Python
python读取多层嵌套文件夹中的文件实例
2020/02/27 Python
Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的
2020/04/20 Python
介绍一下#error预处理
2015/09/25 面试题
企业管理专业个人求职信范文
2013/09/24 职场文书
学前教育专业毕业生自荐信
2013/10/03 职场文书
军训自我鉴定怎么写
2014/02/13 职场文书
低碳生活的宣传标语
2014/06/23 职场文书
求职自我评价范文100字
2014/09/23 职场文书
政府个人对照检查材料思想汇报
2014/10/08 职场文书
开网店计划分析
2019/07/30 职场文书
详解Html5项目适配系统深色模式方案总结
2021/04/14 HTML / CSS
解决golang post文件时Content-Type出现的问题
2021/05/02 Golang
Android实现获取短信验证码并自动填充
2023/05/21 Java/Android