富文本编辑器quill上传图片与视频

linxiyue linxiyue     2023-02-27     302

关键词:

image与video在Quill formats中属于Embeds,要在富文本中插入图片或者视频需要使用insertEmbed api。

insertEmbed

insertEmbed(index: Number, type: String, value: any, source: String = ‘api‘): Delta

插入图片需要位置,内容类型以及图片的url:

quill.insertEmbed(10, ‘image‘, ‘https://quilljs.com/images/cloud.png‘)

获取位置:

const range = quill.getSelection();

上传图片

首先toolbar中添加image,还需要一个隐藏input元素用来上传图片:

<template>
  <div>
    <div id="toolbar">
      <span class="ql-formats">
        <button class="ql-image"></button>
        <button class="ql-video"></button>
      </span>
    </div>
    <div id="editor">
      <p>Hello World!</p>
      <p>Some initial <strong>bold</strong> text</p>
      <p><br></p>
    </div>
    <input id="uploadImg" type="file" style="display:none" accept="image/png, image/jpeg, image/gif" @change="uploadImage">
  </div>
</template>

为image添加handler,点击时上传图片:

this.quill.getModule("toolbar").addHandler("image", this.uploadImageHandler)

handler:

    uploadImageHandler () 
      const input = document.querySelector(‘#uploadImg‘)
      input.value = ‘‘
      input.click()
    ,

为input元素添加onchange事件,获取上传图片,上传服务器,获取图片地址,将地址插入到编辑器中:

  async uploadImage (event) 
      const form = new FormData()
      form.append(‘upload_file‘, event.target.files[0])
      const url = await $.ajax(...)  #上传图片 获取地址
      const addImageRange = this.quill.getSelection()
      const newRange = 0 + (addImageRange !== null ? addImageRange.index : 0)
      this.quill.insertEmbed(newRange, ‘image‘, url)
      this.quill.setSelection(1 + newRange)
    

  全部代码:

<template>
  <div>
    <div id="toolbar">
      <span class="ql-formats">
        <button class="ql-image"></button>
        <button class="ql-video"></button>
      </span>
    </div>
    <div id="editor">
      <p>Hello World!</p>
      <p>Some initial <strong>bold</strong> text</p>
      <p><br></p>
    </div>
    <input id="uploadImg" type="file" style="display:none" accept="image/png, image/jpeg, image/gif" @change="uploadImage">
  </div>
</template>

<script>
import Quill from ‘quill‘

export default 
  name: "QuillEditor",
  mounted () 
    this.initQuill()
  ,
  beforeDestroy () 
    this.quill = null
    delete this.quill
  ,
  methods: 
    initQuill () 
      const quill = new Quill(‘#editor‘, 
        theme: ‘snow‘,
        modules: 
          toolbar: ‘#toolbar‘
        
      )
      this.quill = quill
      this.quill.getModule("toolbar").addHandler("image", this.uploadImageHandler)
    ,
    uploadImageHandler () 
      const input = document.querySelector(‘#uploadImg‘)
      input.value = ‘‘
      input.click()
    ,
    async uploadImage (event) 
      const form = new FormData()
      form.append(‘upload_file‘, event.target.files[0])
      const url = await $.ajax(...)
      const addImageRange = this.quill.getSelection()
      const newRange = 0 + (addImageRange !== null ? addImageRange.index : 0)
      this.quill.insertEmbed(newRange, ‘image‘, url)
      this.quill.setSelection(1 + newRange)
    
  

</script>

上传视频做些少许修改就可以了:

<input id="uploadVideo" type="file" style="display:none" accept="video/*" @change="uploadVideo">
this.quill.getModule("toolbar").addHandler("video", this.uploadVideoHandler)
uploadVideoHandler () ...
async uploadVideo (event) ...

定制Video

默认的video上传会存在一个问题,上传后video是放在iframe中的,一般情况下是没有问题的,但在小程序中使用h5页面时,iframe中的域名需要添加到小程序业务域名中,否则会禁止访问。

更好的解决方法是简单的添加一个video元素,而不是iframe,我们需要定制一个Video Embed。

const BlockEmbed = Quill.import(‘blots/block/embed‘)
class VideoBlot extends BlockEmbed 
  static create (value) 
    let node = super.create()
    node.setAttribute(‘src‘, value.url)
    node.setAttribute(‘controls‘, value.controls)
    node.setAttribute(‘width‘, value.width)
    node.setAttribute(‘height‘, value.height)
    node.setAttribute(‘webkit-playsinline‘, true)
    node.setAttribute(‘playsinline‘, true)
    node.setAttribute(‘x5-playsinline‘, true)
    return node;
  

  static value (node) 
    return 
      url: node.getAttribute(‘src‘),
      controls: node.getAttribute(‘controls‘),
      width: node.getAttribute(‘width‘),
      height: node.getAttribute(‘height‘)
    ;
  

注册:

VideoBlot.blotName = ‘simpleVideo‘
VideoBlot.tagName = ‘video‘
Quill.register(VideoBlot)

插入Embed:

      this.quill.insertEmbed(newRange, ‘simpleVideo‘, 
        url,
        controls: ‘controls‘,
        width: ‘100%‘,
        height: ‘100%‘
      )

添加效果:

<video src="...mp4" controls="controls" width="100%" height="100%" webkit-playsinline="true" playsinline="true" x5-playsinline="true"></video>

  

富文本编辑器上传不了微信文件夹的图片,使用vue-quill-editor编辑器

vue项目中,npm安装npminstallvue-quill-editor--save在main.js注册importVueQuillEditorfrom'vue-quill-editor'import'quill/dist/quill.core.css'import'quill/dist/quill.snow.css'import& 查看详情

富文本编辑器-1-选型

...团队的业务多为后台管理系统,部分业务需要使用富文本编辑器。早期团队选用了百度编辑器,但存在bug多、无人维护、扩展性差等问题,且后续业需要更灵活的编辑器。为了解决这些问题,决定重选编辑器。基于以下原因,笔... 查看详情

轻量级富文本编辑器quilleditor结合iview的使用

...ue-quill-editor是我们在使用vue框架的时候常用的一个富文本编辑器,在进行富文本编辑的时候,我们往往要插入一些图片,vue-quill-editor默认的处理方式是直接将图片转成base64编码,这样的结果是整个富文本的html片段十分冗余,有... 查看详情

vue-quill-editor富文本编辑器使用步骤(代码片段)

首先放上效果图目录1.安装2.引入到项目中3.在页面上写组件4.配置option5.给工具栏鼠标悬停加上中文释义6.上传图片到七牛云7.自定义控制图片大小1.安装npminstallvue-quill-editor-S2.引入到项目中        有两种挂载方式:全局... 查看详情

vuequilleditor自定义图片/视频上传(elementui+oss)字体字体大小段落等(代码片段)

  近期项目中需要使用富文本编辑器,开始想到的富文本编辑器是百度的UEditor,UEditor功能齐全、插件多,但是图片只能上传到本地服务器,如果需要上传到其他服务器需要改动源码,而且是PHP、JSP、ASP、.Ne... 查看详情

在vue项目使用quill-editor带样式编辑器(更改插入图片和视频)

vue-quill-editor默认插入图片是直接将图片转为base64再放入内容中,如果图片比较大的话,富文本的内容就会很大。插入视频是直接弹框输入URL地址,某些需求下我们需要让用户去本地选择自己的视频,我们可以通过vue-quill-editor内... 查看详情

vue+elementui+vue-quill-editor富文本图片上传到骑牛云

vue-quill-editor上传图片会转换成base64格式,但是这不是我们想要的,之后翻了很多文章才找到想要的,下面直接上代码<stylelang="sass">.quill-editormin-height:500pxbackground:#fff.ql-containermin-height:500px.ql-snow.ql-editorimgmax-width:480px. 查看详情

vue-quill-editor富文本编辑器基本的使用与步骤

参考技术A本文章参考文献如下:https://blog.csdn.net/qq_44782585/article/details/123571236https://blog.csdn.net/liuqiao0327/article/details/107126784欢迎大家点赞支持下 查看详情

simditor富文本编辑器多选图片上传视频连接插入(代码片段)

simditor 是一个基于浏览器的所见即所得的文本编辑器。Simditor富文本编辑器,支持多选图片上传,视频连接插入,HTML代码编辑以及常用富文本按钮,支持的浏览器:IE10、Firefox、Safari。点击这里下载zip文件。你也可以安装Simditorbow... 查看详情

富文本编辑器quill的集成(代码片段)

中文地址:https://www.kancloud.cn/liuwave/quill/1409366只要模块:<!--Quill主要库--><scriptsrc="//cdn.quilljs.com/1.3.4/quill.js"></script><scriptsrc="//cdn.qu 查看详情

轻量级quill富文本编辑器

因为公司产品需要在移动端编辑文本,所以发现了这个轻量级的好东西,网上也没找到比较好的案例,就自己总结了下,有兴趣的直接复制代码运行看看就知道啦! 下面是quill.js的CDN加速地址:<!--MainQuilllibrary--><scripts... 查看详情

vue的富文本编辑器(代码片段)

效果图一、先安装vue-quill-editornpminstallvue-quill-editor--save2.在main.js中引入//引入富文本编辑器importVueQuillEditorfrom'vue-quill-editor'//引入vue-quill-editor相关样式import'quill/dist/quill.core.css'import 查看详情

富文本编辑器的使用(代码片段)

...npminstallvue-quill-editor--save23然后在main.js里面引入4/富文本编辑器5importVueQuillEditorfrom‘vue-quill-editor‘6import‘quill/dist/quill.core.css‘7import‘quill/dist/quill.snow.css‘8import‘quill/dist/quill.bubble.css‘9import‘@/styles/index.scss‘//globalcss全局样式... 查看详情

vue基于vue-quill-editor富文本编辑器

1、Vue基于vue-quill-editor富文本编辑器使用心得:https://www.cnblogs.com/ZaraNet/p/10209226.html 2、使用vue-quill-editor,获得到输入内容的html,怎样才能在外部的div中有跟编辑器里:用v-html绑定一下就行了,加上class="ql-editor"的话,样式就... 查看详情

vue-quill-editor富文本编辑器使用(代码片段)

vue-quill-editorgithub地址:https://github.com/surmon-china/vue-quill-editor官方文档地址:https://www.npmjs.com/package/vue-quill-editor vue项目中,npm安装依赖npminstallvue-quill-editor--save两种引用方法,全局引用和局部引用全局引用,项 查看详情

vue使用富文本编辑器vue-quill-editor(代码片段)

问题描述:我们在开发过程中经常会遇到使用富文本编辑器进行操作,当前插件市场上关于富文本的编辑器挺多的,我们就不一一个介绍了,现在我们主要讲解一些vue-quill-editor富文本编辑器的使用操作和注意事项... 查看详情

vue2封装的quill富文本编辑器组件vue-quill-editor

1、安装  npminstallvue-quill-editor--save2、使用import{quillEditor}from‘vue-quill-editor‘  3、组件中<quill-editorv-model="content"ref="myQuillEditor"class="editer":options="editorOption"@ready="onE 查看详情

vue-quill-editor,wangeeitor实现富文本编辑器(代码片段)

目录vue2---使用vue-quill-editor1、安装vue-quill-editor模块2、将vue-quill-editor引入到项目中 3、创建组件4、结果展示 vue3---使用WangEditor1、安装模块2、创建组件 3、结果展示vue2---使用vue-quill-editor1、安装vue-quill-editor模块npminstallvue-quill-ed... 查看详情