vue2使用tinymce富文本編輯器,將圖片(包括粘貼)通過STS直傳阿里云OSS

此處使用的是vue2.X,如果是vue3的話安裝方式可能不一樣

安裝

// vue2.X只能安裝低版本
npm install tinymce@5.1.0 -S
npm install @tinymce/tinymce-vue@3.0.1 -S

使用
需要漢化的話要去官網(wǎng)下載中文包洲押,然后將langs放到根目錄的public下面,方便引用
https://www.tiny.cloud/get-tiny/language-packages/


<editor :init="editorInit" />

import Editor from "@tinymce/tinymce-vue";
export default {
    components: {
        Editor,
    },
    data() {
        let _this = this;
        return {
            // 這是配置
            editorInit: {
                height: 500,
                // 中文
                language_url: "/langs/zh_CN.js",
                language: "zh_CN",
                // 插件圆凰,此處是圖片上傳和粘貼
                plugins: [ "image", "paste"],
                // word支持
                powerpaste_word_import: "merge",
                // 允許直接粘貼data圖片
                paste_data_images: true,
                // 自定義上傳方法
                images_upload_handler: function (file, successFun, failFUn) {

                    // 可以轉(zhuǎn)為base64
                    console.log(file.base64());

                    // 也可以轉(zhuǎn)為blob杈帐,但是直接轉(zhuǎn)blob在粘貼圖片時(shí)文件有問題
                    // 所以只能先使用base64,再轉(zhuǎn)回blob后進(jìn)行上傳........
                    console.log(file.blob());

                    // 將base64轉(zhuǎn)為blob专钉,后面的文件名隨便寫挑童,反正上傳oss的時(shí)候要生成隨機(jī)文件名
                    let f = _this.dataURLtoFile(file.base64(), "123.png");
                     
                    // 自己封的上傳方法,采用callback形式返回?cái)?shù)據(jù)
                    _this.fileToOss(f, (url) => {
                        // 上傳成功后調(diào)用插件api跃须,將圖片替換到富文本中
                        successFun(url);
                    });
                },
            },
            ossData: [],
        };
    },
    created() {
        // 獲取后臺(tái)給你的STS配置數(shù)據(jù)
        this.getSts();
    },
    methods: {
        // 獲取后臺(tái)給你的STS配置數(shù)據(jù)
        getSts() {
            let _this = this;
            this.request
                .post(this.api.sts)
                .then((res) => {
                    _this.ossData = res;
                });
        },
        // base64轉(zhuǎn)blob
        dataURLtoFile(dataurl, filename) {
            var mime = "png",
                bstr = atob(dataurl),
                n = bstr.length,
                u8arr = new Uint8Array(n);
            while (n--) {
                u8arr[n] = bstr.charCodeAt(n);
            }
            return new File([u8arr], filename, { type: mime });
        },
        // 自己封裝的上傳方法
        fileToOss(file, callBack = () => {}) {
            const OSS = require("ali-oss");

            const client = new OSS({
                region: "oss-cn-beijing",
                accessKeyId: this.ossData.AccessKeyId,
                accessKeySecret: this.ossData.AccessKeySecret,
                stsToken: this.ossData.SecurityToken,
                refreshSTSToken: async () => {
                    const info = await fetch(this.ossData.StsServer);
                    return {
                        accessKeyId: info.accessKeyId,
                        accessKeySecret: info.accessKeySecret,
                        stsToken: info.stsToken,
                    };
                },
                // 刷新臨時(shí)訪問憑證的時(shí)間間隔站叼,單位為毫秒。
                refreshSTSTokenInterval: 300000,
                bucket: this.ossData.bucket,
            });

            const data = file;
            let _this = this;
            async function putObject() {
                try {
                    // 后綴
                    let fileType = file.name.split(".").pop();
                    const result = await client.put(
                        "icon/" + _this.createKey(32) + "." + fileType,
                        data
                    );
                    callBack(result.url);
                } catch (e) {
                    _this.$message.error("圖片上傳失敗菇民,請(qǐng)稍后重試");
                }
            }
            putObject();
        },
        // 生成隨機(jī)文件名的方法
        createKey(length) {
            const data = [
                "0",
                "1",
                "2",
                "3",
                "4",
                "5",
                "6",
                "7",
                "8",
                "9",
                "A",
                "B",
                "C",
                "D",
                "E",
                "F",
                "G",
                "H",
                "I",
                "J",
                "K",
                "L",
                "M",
                "N",
                "O",
                "P",
                "Q",
                "R",
                "S",
                "T",
                "U",
                "V",
                "W",
                "X",
                "Y",
                "Z",
                "a",
                "b",
                "c",
                "d",
                "e",
                "f",
                "g",
                "h",
                "i",
                "j",
                "k",
                "l",
                "m",
                "n",
                "o",
                "p",
                "q",
                "r",
                "s",
                "t",
                "u",
                "v",
                "w",
                "x",
                "y",
                "z",
            ];
            let nums = "";
            for (let i = 0; i < length; i++) {
                const r = parseInt(Math.random() * 61, 10);
                nums += data[r];
            }
            return nums;
        },
    }
  ......
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末尽楔,一起剝皮案震驚了整個(gè)濱河市投储,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌阔馋,老刑警劉巖玛荞,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異呕寝,居然都是意外死亡冲泥,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門壁涎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凡恍,“玉大人,你說我怎么就攤上這事怔球〗涝停” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵竟坛,是天一觀的道長(zhǎng)闽巩。 經(jīng)常有香客問我,道長(zhǎng)担汤,這世上最難降的妖魔是什么涎跨? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮崭歧,結(jié)果婚禮上隅很,老公的妹妹穿的比我還像新娘。我一直安慰自己率碾,他們只是感情好叔营,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著所宰,像睡著了一般绒尊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上仔粥,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天婴谱,我揣著相機(jī)與錄音,去河邊找鬼躯泰。 笑死谭羔,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的斟冕。 我是一名探鬼主播口糕,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼磕蛇!你這毒婦竟也來了景描?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤秀撇,失蹤者是張志新(化名)和其女友劉穎超棺,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體呵燕,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡棠绘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了再扭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片氧苍。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖泛范,靈堂內(nèi)的尸體忽然破棺而出让虐,到底是詐尸還是另有隱情,我是刑警寧澤罢荡,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布赡突,位于F島的核電站,受9級(jí)特大地震影響区赵,放射性物質(zhì)發(fā)生泄漏惭缰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一笼才、第九天 我趴在偏房一處隱蔽的房頂上張望漱受。 院中可真熱鬧,春花似錦骡送、人聲如沸拜效。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽紧憾。三九已至,卻和暖如春昌渤,著一層夾襖步出監(jiān)牢的瞬間赴穗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工膀息, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留般眉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓潜支,卻偏偏與公主長(zhǎng)得像甸赃,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子冗酿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

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