vue-quill-editor视频上传,图片上传到服务器模块,用video标签替换iframe

# quill-video-image-module

#### 介绍

quill视频上传,图片上传到服务器模块,用video标签替换iframe

#### 安装教程

1. cnpm i vue-quill-editor

2. cnpm i quill

3. cnpm i quill-video-image-module

#### 使用说明

```javascript

<template>

  <div class="createArticle">

    <quill-editor class="ql-editor" v-model="content" ref="myQuillEditor" :options="editorOption"></quill-editor>

  </div>

</template>

<script>

  import 'quill/dist/quill.core.css' // import styles

  import 'quill/dist/quill.snow.css' // for snow theme

  import 'quill/dist/quill.bubble.css' // for bubble theme

  import {

    quillEditor,

    Quill

  } from 'vue-quill-editor';

  import {

    container

  } from 'quill-video-image-module';

  import {

    ImageExtend,

    QuillWatch

  } from 'quill-video-image-module/quill-image-module';

  import {

    VideoExtend,

    QuillVideoWatch

  } from 'quill-video-image-module/quill-video-module'

  // 引入video模块并注册

  import video from 'quill-video-image-module/video'

  Quill.register(video, true)

  Quill.register('modules/ImageExtend', ImageExtend)

  Quill.register('modules/VideoExtend', VideoExtend)

  export default {

    components: {

      quillEditor

    },

    data() {

      return {

        content: '',

        // 富文本框参数设置

        editorOption: {

          modules: {

            ImageExtend: {

              loading: true, // 可选参数 是否显示上传进度和提示语

              name: 'img', // 图片参数名

              size: 2, // 可选参数 图片大小,单位为M,1M = 1024kb

              action: 'http://127.0.0.1:5000/upload/img', // 服务器地址, 如果action为空,则采用base64插入图片

              // response 为一个函数用来获取服务器返回的具体图片地址

              // 例如服务器返回{code: 200; data:{ url: 'baidu.com'}}

              // 则 return res.data.url

              response: res => {

                return res.data.url;

              },

              headers: () => {}, // 可选参数 设置请求头部

              start: () => {}, // 可选参数 自定义开始上传触发事件

              end: () => {}, // 可选参数 自定义上传结束触发的事件,无论成功或者失败

              error: () => {}, // 可选参数 自定义网络错误触发的事件

              change: () => {}, // 可选参数 每次选择图片触发,也可用来设置头部,但比headers多了一个参数,可设置formData

              sizeError: () => {

                alert('图片不能大于1M')

              }

            },

            VideoExtend: {

              loading: true,

              name: 'img',

              size: 100, // 可选参数 视频大小,单位为M,1M = 1024kb

              action: 'http://127.0.0.1:5000/upload/img', // 视频上传接口

              headers: (xhr) => {

                // set custom token(optional)

              },

              response: (res) => {

                // video uploaded path

                // custom your own

                return res.data.url;

              },

              sizeError: () => {

                alert('视频不能大于100M')

              }

            },

            toolbar: {

              container: container, // container为工具栏,此次引入了全部工具栏,也可自行配置

              handlers: {

                image: function() {

                  // 劫持原来的图片点击按钮事件

                  QuillWatch.emit(this.quill.id);

                },

                video: function() {

                  QuillVideoWatch.emit(this.quill.id)

                }

              }

            }

          }

        }

      };

    },

    methods: {},

    created() {

    }

  };

</script>

```

```css

<style>

  .createArticle {

    padding: 40px 40px;

  }

  .ql-editor {

    min-height: 800px;

  }

  /* 解决粘贴后光标会自动弹到文档的初始位置 */

  .ql-clipboard {

    position: fixed;

    display: none;

    left: 50%;

    top: 50%;

  }

  /* 富文本汉化 */

  .ql-snow .ql-tooltip[data-mode='link']::before {

    content: '请输入链接地址:';

  }

  .ql-snow .ql-tooltip.ql-editing a.ql-action::after {

    border-right: 0px;

    content: '保存';

    padding-right: 0px;

  }

  .ql-snow .ql-tooltip[data-mode='video']::before {

    content: '请输入视频地址:';

  }

  .ql-snow .ql-picker.ql-size .ql-picker-label::before,

  .ql-snow .ql-picker.ql-size .ql-picker-item::before {

    content: '14px';

  }

  .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='small']::before,

  .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='small']::before {

    content: '10px';

  }

  .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='large']::before,

  .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='large']::before {

    content: '18px';

  }

  .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='huge']::before,

  .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='huge']::before {

    content: '32px';

  }

  .ql-snow .ql-picker.ql-header .ql-picker-label::before,

  .ql-snow .ql-picker.ql-header .ql-picker-item::before {

    content: '文本';

  }

  .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='1']::before,

  .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='1']::before {

    content: '标题1';

  }

  .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='2']::before,

  .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='2']::before {

    content: '标题2';

  }

  .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='3']::before,

  .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='3']::before {

    content: '标题3';

  }

  .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='4']::before,

  .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='4']::before {

    content: '标题4';

  }

  .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='5']::before,

  .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='5']::before {

    content: '标题5';

  }

  .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='6']::before,

  .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='6']::before {

    content: '标题6';

  }

  .ql-snow .ql-picker.ql-font .ql-picker-label::before,

  .ql-snow .ql-picker.ql-font .ql-picker-item::before {

    content: '标准字体';

  }

  .ql-snow .ql-picker.ql-font .ql-picker-label[data-value='serif']::before,

  .ql-snow .ql-picker.ql-font .ql-picker-item[data-value='serif']::before {

    content: '衬线字体';

  }

  .ql-snow .ql-picker.ql-font .ql-picker-label[data-value='monospace']::before,

  .ql-snow .ql-picker.ql-font .ql-picker-item[data-value='monospace']::before {

    content: '等宽字体';

  }

</style>

```

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,478评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,825评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,482评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,726评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,633评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,018评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,168评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,320评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,264评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,288评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,995评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,587评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,909评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,284评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,862评论 2 339