富文本vue-quill-editor整合七牛云上傳圖片

1.概述

實(shí)現(xiàn)前提:

實(shí)現(xiàn)思路:
根據(jù)大神的文章,大概思路如下:

  • 1.先用el-upload組件實(shí)現(xiàn)和七牛云的上傳坚嗜。
  • 2.隱藏掉el-upload組件践宴。
  • 3.處理點(diǎn)擊富文本框的圖片的按鈕的時(shí)候哨查,調(diào)用el-upload的上傳。
  • 4.上傳成功后弦疮,拼接好圖片的地址夹攒,按照光標(biāo)的為止插入到富文本中

目標(biāo):將上面的部分封裝成組件,提供給每個(gè)頁(yè)面方面的使用

1.實(shí)現(xiàn)代碼

1.1 組件定義

<!-- 
基于quill-editor的整合七牛云上傳的自定義組件
elemntUI文檔地址 http://element.eleme.io/#/zh-CN/component/tag
quill-editor 文檔地址 https://surmon-china.github.io/vue-quill-editor/
quill-editor整合七牛云上傳https://github.com/NextBoy/skill/issues/2
-->

<template>
   <div id='quillEditorQiniu'>
       <!-- 基于elementUi的上傳組件 el-upload begin-->
       <el-upload
            class="avatar-uploader"
            :action="uploadUrl"
            :accept="'image/*'"
            :data="qiniuForm"
            :show-file-list="false"
            :on-success="uploadEditorSuccess"
            :on-error="uploadEditorError"
            :before-upload="beforeEditorUpload">
        </el-upload>
        <!-- 基于elementUi的上傳組件 el-upload end-->
        <quill-editor  class="editor"  v-model="content" ref="customQuillEditor" :options="editorOption" >
        </quill-editor>
   </div>
</template>

<script>
import { quillEditor } from 'vue-quill-editor'


//自定義編輯器的工作條
const toolbarOptions = [
        ['bold', 'italic', 'underline', 'strike'],        // toggled buttons
        ['blockquote', 'code-block'],

        [{'header': 1}, {'header': 2}],               // custom button values
        [{'list': 'ordered'}, {'list': 'bullet'}],
        [{'script': 'sub'}, {'script': 'super'}],      // superscript/subscript
        [{'indent': '-1'}, {'indent': '+1'}],          // outdent/indent
        [{'direction': 'rtl'}],                         // text direction

        [{'size': ['small', false, 'large', 'huge']}],  // custom dropdown
        [{'header': [1, 2, 3, 4, 5, 6, false]}],

        [{'color': []}, {'background': []}],          // dropdown with defaults from theme
        [{'font': []}],
        [{'align': []}],
        ['link', 'image', 'video'],
        ['clean']                                         // remove formatting button
    ];
export default {
    data(){
        return {
           quillUpdateImg:false,
           content:'',
           editorOption:{
                  placeholder:'請(qǐng)?zhí)顚戃囕v詳情信息',
                  modules: {
                        toolbar: {
                            container: toolbarOptions,  // 工具欄
                            handlers: {
                                'image': function (value) {
                                    if (value) {
                                        document.querySelector('#quillEditorQiniu .avatar-uploader input').click()
                                    } else {
                                        this.quill.format('image', false);
                                    }
                                }
                            }
                        }
                 }
            },
            qiniuForm:{
                'key': '',
                'token': '',
                'domain':''
            },
        }
    },
    props:{
        token:String, //七牛云上傳的token,類型為String
        domain:String, //七牛云上傳的域地址,類型為String
        uploadUrl:String  //從七牛云上拿到自己的上傳地址,類型為String
    },
    methods:{
        //上傳圖片之前
        beforeEditorUpload(res, file){

            //顯示上傳動(dòng)畫
            this.quillUpdateImg = true;
        },

        // 上傳圖片成功
        uploadEditorSuccess(res, file) {

            //拼接出上傳的圖片在服務(wù)器的完整地址
            let imgUrl = this.qiniuForm.domain+ res.key;

            //重置上傳文件key胁塞,為下次上傳做好準(zhǔn)備
            this.qiniuForm.key =  new Date().getTime()+""+Math.floor(Math.random()*1000);

            // 獲取富文本組件實(shí)例
            let quill = this.$refs.customQuillEditor.quill;

           // 獲取光標(biāo)所在位置
            let length = quill.getSelection().index;

            // 插入圖片  res.info為服務(wù)器返回的圖片地址
            quill.insertEmbed(length, 'image', imgUrl)

            // 調(diào)整光標(biāo)到最后
            quill.setSelection(length + 1)

            //取消上傳動(dòng)畫
            this.quillUpdateImg = false;

        },
        
        // 上傳圖片失敗
        uploadEditorError(res, file) {
            //頁(yè)面提示
            Notification.error({
                   message: '上傳圖片失敗'
            });

            //取消上傳動(dòng)畫
            this.quillUpdateImg = false;
        },

        

       
    },
    mounted () {
        this.qiniuForm.key =  new Date().getTime()+""+Math.floor(Math.random()*1000);
        this.qiniuForm.token = this.token;
        this.qiniuForm.domain = this.domain;
    },
    watch:{
        content(newVal, oldVal) {
          this.$emit('input', newVal);
        }
    }

    

}
</script>

<style scoped>
.editor{
    min-height: 200px;
    margin-bottom: 60px;
}
</style>

1.2 組件的使用

1.2.1 引入組件

import SquillEditorQiniu from '@/components/quill-editor-qiniu.vue';

1.2.2 注冊(cè)成組件

 components:{
        SquillEditorQiniu //富文本框上傳組件
    }

1.2.3 放入組件

<squill-editor-qiniu :token='qiniuForm.token' v-model="addForm.details" :domain='qiniuForm.domain' uploadUrl='http://upload.qiniup.com/'></squill-editor-qiniu>

  • token:需要從后臺(tái)獲取咏尝,后臺(tái)和七牛云請(qǐng)求得到
  • v-model: 你最后得到的文本的屬性
  • domain: 七牛云的域,可以從七牛云獲取到
  • uploadUrl: 上傳地址闲先,也是從七牛云獲取

1.2 實(shí)現(xiàn)效果

實(shí)現(xiàn)效果

我們可以看到最終上傳一個(gè)圖片状土,里面html代碼里的圖片地址是我們七牛云上的地址

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市伺糠,隨后出現(xiàn)的幾起案子蒙谓,更是在濱河造成了極大的恐慌,老刑警劉巖训桶,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件累驮,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡舵揭,警方通過查閱死者的電腦和手機(jī)谤专,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來午绳,“玉大人置侍,你說我怎么就攤上這事±狗伲” “怎么了蜡坊?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)赎败。 經(jīng)常有香客問我秕衙,道長(zhǎng),這世上最難降的妖魔是什么僵刮? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任据忘,我火速辦了婚禮鹦牛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘勇吊。我一直安慰自己曼追,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布萧福。 她就那樣靜靜地躺著拉鹃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鲫忍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天钥屈,我揣著相機(jī)與錄音悟民,去河邊找鬼。 笑死篷就,一個(gè)胖子當(dāng)著我的面吹牛射亏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播竭业,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼智润,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了未辆?” 一聲冷哼從身側(cè)響起窟绷,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎咐柜,沒想到半個(gè)月后兼蜈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拙友,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年为狸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片遗契。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡辐棒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出牍蜂,到底是詐尸還是另有隱情漾根,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布捷兰,位于F島的核電站立叛,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏贡茅。R本人自食惡果不足惜秘蛇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一其做、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赁还,春花似錦妖泄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至朋蔫,卻和暖如春罚渐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背驯妄。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工荷并, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人青扔。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓源织,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親微猖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谈息,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容