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 相关文章推荐
JS 学习笔记 防止发生命名冲突
Jul 30 Javascript
JS实现定时页面弹出类似QQ新闻的提示框
Nov 07 Javascript
JavaScript中如何通过arguments对象实现对象的重载
May 12 Javascript
node中socket.io的事件使用详解
Dec 15 Javascript
理解Javascript的动态语言特性
Jun 17 Javascript
JS高仿抛物线加入购物车特效实现代码
Feb 20 Javascript
JS使用插件cryptojs进行加密解密数据实例
May 11 Javascript
vue中用H5实现文件上传的方法实例代码
May 27 Javascript
vue单页应用中如何使用jquery的方法示例
Jul 27 jQuery
在vue中实现点击选择框阻止弹出层消失的方法
Sep 15 Javascript
VeeValidate 的使用场景以及配置详解
Jan 11 Javascript
Javascript如何递归遍历本地文件夹
Aug 06 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下MAIL的另一解决方案
2006/10/09 PHP
一家之言的经验之谈php+mysql扎实个人基本功
2008/03/27 PHP
php中常用的预定义变量小结
2012/05/09 PHP
php实现映射操作实例详解
2019/10/02 PHP
imgAreaSelect 中文文档帮助说明
2011/10/08 Javascript
jquery1.9 下检测浏览器类型和版本的方法
2013/12/26 Javascript
jQuery中animate用法实例分析
2015/03/09 Javascript
jquery移动端TAB触屏切换实现效果
2020/12/22 Javascript
倾力总结40条常见的移动端Web页面问题解决方案
2016/05/24 Javascript
JS实现重新加载当前页面或者父页面的几种方法
2016/11/30 Javascript
微信小程序之多文件下载的简单封装示例
2018/01/29 Javascript
Vue2.0 实现页面缓存和不缓存的方式
2019/11/12 Javascript
五句话帮你轻松搞定js原型链
2020/12/09 Javascript
python自然语言编码转换模块codecs介绍
2015/04/08 Python
Python中自定义函数的教程
2015/04/27 Python
Python使用Paramiko模块编写脚本进行远程服务器操作
2016/05/05 Python
详解如何将python3.6软件的py文件打包成exe程序
2018/10/09 Python
利用ctypes获取numpy数组的指针方法
2019/02/12 Python
python中的print()输出
2019/04/12 Python
Django框架视图函数设计示例
2019/07/29 Python
python中自带的三个装饰器的实现
2019/11/08 Python
python PIL/cv2/base64相互转换实例
2020/01/09 Python
使用python的pyplot绘制函数实例
2020/02/13 Python
python json.dumps() json.dump()的区别详解
2020/07/14 Python
用Python实现定时备份Mongodb数据并上传到FTP服务器
2021/01/27 Python
不同浏览器对CSS3和HTML5的支持状况
2009/10/31 HTML / CSS
html5需遵循的6个设计原则
2016/04/27 HTML / CSS
HTML5 Canvas玩转酷炫大波浪进度图效果实例(附demo)
2016/12/14 HTML / CSS
HTML5中外部浏览器唤起微信分享功能的代码
2020/09/15 HTML / CSS
幼儿园教师自我鉴定
2014/03/20 职场文书
安全承诺书范文
2014/03/26 职场文书
幼儿园小班家长寄语
2014/04/02 职场文书
2014年国庆标语
2014/06/30 职场文书
党章党规党纪学习心得体会
2016/01/14 职场文书
Django使用echarts进行可视化展示的实践
2021/06/10 Python
python 闭包函数详细介绍
2022/04/19 Python