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与DropDownList 区别分析
Jan 01 Javascript
javascript中的prototype属性使用说明(函数功能扩展)
Aug 16 Javascript
JavaScript使用HTML5的window.postMessage实现跨域通信例子
Apr 11 Javascript
浅析node.js中close事件
Nov 26 Javascript
javascript实现类似于新浪微博搜索框弹出效果的方法
Jul 27 Javascript
JavaScript代码因逗号不规范导致IE不兼容的问题
Feb 25 Javascript
vue.js实现表格合并示例代码
Nov 30 Javascript
Bootstrap Table使用整理(五)之分页组合查询
Jun 09 Javascript
webpack4的迁移的使用方法
May 25 Javascript
微信小程序实现天气预报功能
Jul 18 Javascript
浅析vue-router原理
Oct 19 Javascript
bootstrap实现tab选项卡切换
Aug 09 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
第九节--绑定
2006/11/16 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(五)
2014/06/23 PHP
php类自动加载器实现方法
2015/07/28 PHP
PHP静态成员变量
2017/02/14 PHP
Jquery实现带动画效果的经典二级导航菜单
2013/03/22 Javascript
jQuery的:parent选择器定义和用法
2014/07/01 Javascript
jquery分割字符串的方法
2015/06/24 Javascript
javascript日期操作详解(脚本之家整理)
2015/09/05 Javascript
jQuery链式操作实例分析
2015/11/16 Javascript
jQuery实现最简单实用的分秒倒计时
2017/02/05 Javascript
详解Vue2.0 事件派发与接收
2017/09/05 Javascript
nodejs 图解express+supervisor+ejs的用法(推荐)
2017/09/08 NodeJs
webpack组织模块打包Library的原理及实现
2018/03/10 Javascript
微信小程序实现天气预报功能
2018/07/18 Javascript
前后端如何实现登录token拦截校验详解
2018/09/03 Javascript
vue elementUI 表单校验功能之数组多层嵌套
2019/06/04 Javascript
layui使用button按钮 点击出现弹层 弹层中加载表单的实例
2019/09/04 Javascript
python网络编程学习笔记(二):socket建立网络客户端
2014/06/09 Python
python分割文件的常用方法
2014/11/01 Python
python多线程用法实例详解
2015/01/15 Python
Python实现简单拆分PDF文件的方法
2015/07/30 Python
python+matplotlib绘制旋转椭圆实例代码
2018/01/12 Python
在python中实现强制关闭线程的示例
2019/01/22 Python
自学python的建议和周期预算
2019/01/30 Python
Python-Tkinter Text输入内容在界面显示的实例
2019/07/12 Python
Django RBAC权限管理设计过程详解
2019/08/06 Python
flask框架url与重定向操作实例详解
2020/01/25 Python
Tensorflow--取tensorf指定列的操作方式
2020/06/30 Python
Notino希腊:购买香水和美容产品
2019/07/25 全球购物
初中考试作弊检讨书
2014/02/01 职场文书
党员民主生活会个人整改措施材料
2014/09/16 职场文书
2015年乡镇纪检工作总结
2015/04/22 职场文书
傅雷家书读书笔记
2015/06/29 职场文书
nginx反向代理配置去除前缀案例教程
2021/07/26 Servers
Elasticsearch 聚合查询和排序
2022/04/19 Python
winserver2019安装软件一直卡在应用程序正在为首次使用做准备
2022/06/10 Servers