element-ui el-upload http-request自定義上傳方法

element-ui官方文檔上沒(méi)有自定義上傳方法的完整例子扭勉,根據(jù)實(shí)際需求自己寫(xiě)了一個(gè)
需求是這樣的:
1.用的是element-ui el-upload組件萧吠,可以上傳圖片或者視頻
2.圖片和視頻在上傳之前有不同的大小驗(yàn)證
3.圖片大小不能大于2MB肴盏,尺寸要求7501125px
4.視頻大小不能大于2MB低矮,尺寸要求750
1125px,格式MP4
5.上傳圖片和視頻的后端接口URL不一樣
6.上傳后可預(yù)覽圖片和視頻

html

<el-form-item class="upload-bg register-bg" label="上傳廣告圖:" prop="ad_url">
    <div class="hide-video-box"></div>
    <el-upload
        class="avatar-uploader"
        ref="upload" 
        :action="upload_url" 
        list-type="picture-card" 
        :name="upload_name"
        :on-remove="handleRemove" 
        :on-exceed="handleExceed"
        :file-list="ad_url_list"
        :limit="1"
        :http-request="uploadSectionFile">
        <span class="font-14">選擇圖片或視頻</span>
        <div slot="tip" class="el-upload__tip">尺寸750*1125px,大小2M以內(nèi)丰榴,視頻支持MP4</div>
    </el-upload>
    <div class="bg-box">廣告背景圖預(yù)覽</div>
</el-form-item>

js

data: function(){
    return {
        upload_url: '',//上傳URL
        upload_name: '',//圖片或視頻名稱
        ad_url: '',//上傳后的圖片或視頻URL
        ad_url_list: [],//預(yù)覽列表
    }
},
methods: {
    handleExceed: function () {
        _.$alert('請(qǐng)先刪除選擇的圖片或視頻,再上傳', '提示', {
            type: 'warning'
        });
    },
    handleRemove: function (res, file) {
        var self = this;
        self.ad_url = '';
        var liItem = document.getElementsByClassName('hide-video-box')[0];
        liItem.innerHTML = '';
    },
    uploadSectionFile: function (params) {
        var self = this,
            file = params.file,
            fileType = file.type,
            isImage = fileType.indexOf('image') != -1,
            isVideo = fileType.indexOf('video') != -1,
            file_url = self.$refs.upload.uploadFiles[0].url;
        
        var isLt2M = file.size / 1024 / 1024 < 2;
        if (!isLt2M) {
            _.$alert('上傳圖片或視頻大小不能超過(guò) 2MB!', '提示', { type: 'error' });
            self.$refs.upload.uploadFiles = []; 
            return;
        }

        if(!isImage && !isVideo){
            _.$alert('請(qǐng)選擇圖片或視頻!', '提示', { type: 'error' });
            self.$refs.upload.uploadFiles = []; 
            return;
        }

        if (isImage) {
            var img = new Image();
            img.src = file_url;
            img.onload = function () {
                if (img.width !== 750 || img.height != 1125) {
                    _.$alert('圖片尺寸為750*1125px', '提示', { type: 'error' });
                    //將上傳列表清空
                    self.$refs.upload.uploadFiles = []; 
                    return;
                }
                //圖片上傳
                self.upload_url = '你的圖片上傳URL';
                self.upload_name = 'file_img[]';
                self.uploadFile(file, isVideo, '');
            }
        } else if (isVideo) {
            var isMP4 = file.type === 'video/mp4';
            if (!isMP4) {
                _.$alert('上傳視頻只支持 mp4 格式!', '提示', { type: 'error' });
                self.$refs.upload.uploadFiles = []; 
                return;
            }
            var videoDiv = document.createElement('video');
            var liItem = document.getElementsByClassName('hide-video-box')[0];
            videoDiv.src = file_url;
            liItem.appendChild(videoDiv);
            
            videoDiv.onloadeddata = function (event) {
                var target = event.target;
                var width = target.offsetWidth;
                var height = target.offsetHeight;

                if (width !== 750 || height != 1125) {
                    _.$alert('視頻尺寸為750*1125px', '提示', { type: 'error' });
                    //將上傳列表清空
                    self.$refs.upload.uploadFiles = []; 
                    return;
                }

                //視頻上傳
                self.upload_url = '你的視頻上傳URL';
                self.upload_name = 'file_video[]';
                self.uploadFile(file, isVideo, videoDiv);
            }
        }
    },
    uploadFile: function (file, isVideo, videoDiv) {
        var self = this,
            formData = new FormData();
        formData.append(self.upload_name, file);

        axios.post(self.upload_url, formData, { headers: { 'Content-Type': 'multipart/form-data' } })
            .then(function (res) {
                if (res.result === '0000') {
                    self.ad_url = res.data[0];
                    //創(chuàng)建一個(gè)顯示video的容器
                    if (isVideo) {
                        var liItem = document.getElementsByClassName('el-upload-list__item')[0];
                        videoDiv.style.width = '278px';
                        videoDiv.style.height = '415px';
                        liItem.prepend(videoDiv);
                    }
                    return;
                }
                _.$alert('上傳失敗秆撮,請(qǐng)重新上傳', '提示', { type: 'error' });
                self.$refs.upload.uploadFiles = []; 
            })
            .catch(function (err) {
                console.error(err);
            });
    }
}

css

.upload-bg {
    margin-bottom: 290px;
    &.register-bg{
        .el-upload-list--picture-card .el-upload-list__item{
            width: 280px;
            height: 417px;
        }
        .bg-box{
            width: 278px;
            height: 415px;
            line-height: 417px;
        }
    }
    .avatar-uploader {
        position: relative;
        z-index: 999;
    }
    .el-upload-list--picture-card{
        position: absolute;
        top: 0;
        left: 420px;
    }
    .bg-box{
        position: absolute;
        left: 420px;
        top: 0;
        z-index: 998;
        margin-bottom: 20px;
        border: 1px solid #c0ccda;
        border-radius: 5px;
        text-align: center;
        color: #bbb;
        font-size: 13px;
    }
    .el-upload--picture-card{
        height: 40px;
        line-height: 40px;
        span { color: #1AB394; }
    }
}
.hide-video-box {
    visibility: hidden;
    position: absolute;
    z-index: -999;
}
tips: 簡(jiǎn)書(shū)上交流可能會(huì)看不到消息四濒,如有問(wèn)題,歡迎進(jìn)群交流50063010
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末职辨,一起剝皮案震驚了整個(gè)濱河市盗蟆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拨匆,老刑警劉巖姆涩,帶你破解...
    沈念sama閱讀 222,946評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異惭每,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)台腥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)宏赘,“玉大人,你說(shuō)我怎么就攤上這事黎侈〔焓穑” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,716評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵峻汉,是天一觀的道長(zhǎng)贴汪。 經(jīng)常有香客問(wèn)我,道長(zhǎng)休吠,這世上最難降的妖魔是什么扳埂? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,222評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮瘤礁,結(jié)果婚禮上阳懂,老公的妹妹穿的比我還像新娘。我一直安慰自己柜思,他們只是感情好岩调,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,223評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著赡盘,像睡著了一般号枕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上陨享,一...
    開(kāi)封第一講書(shū)人閱讀 52,807評(píng)論 1 314
  • 那天葱淳,我揣著相機(jī)與錄音,去河邊找鬼霉咨。 笑死蛙紫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的途戒。 我是一名探鬼主播坑傅,決...
    沈念sama閱讀 41,235評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼喷斋!你這毒婦竟也來(lái)了唁毒?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,189評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤星爪,失蹤者是張志新(化名)和其女友劉穎浆西,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體顽腾,經(jīng)...
    沈念sama閱讀 46,712評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡近零,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,775評(píng)論 3 343
  • 正文 我和宋清朗相戀三年诺核,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片久信。...
    茶點(diǎn)故事閱讀 40,926評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡窖杀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出裙士,到底是詐尸還是另有隱情入客,我是刑警寧澤,帶...
    沈念sama閱讀 36,580評(píng)論 5 351
  • 正文 年R本政府宣布腿椎,位于F島的核電站桌硫,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏啃炸。R本人自食惡果不足惜铆隘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,259評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望肮帐。 院中可真熱鬧咖驮,春花似錦、人聲如沸训枢。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,750評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)恒界。三九已至睦刃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間十酣,已是汗流浹背涩拙。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,867評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留耸采,地道東北人兴泥。 一個(gè)月前我還...
    沈念sama閱讀 49,368評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像虾宇,于是被迫代替她去往敵國(guó)和親搓彻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,930評(píng)論 2 361

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

  • 1嘱朽、通過(guò)CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明先生_X自主閱讀 15,988評(píng)論 3 119
  • 記得還是小學(xué)生的時(shí)候旭贬,我拿著個(gè)20元錢(qián)放到工行里存。那時(shí)候認(rèn)為搪泳,存錢(qián)就會(huì)有利息稀轨,等過(guò)了一定的時(shí)間,我的錢(qián)就...
    IMEdgar閱讀 2,568評(píng)論 0 0
  • 清理yum緩存 清理yum緩存使用yum clean 命令岸军,yum clean 的參數(shù)有headers, pack...
    陽(yáng)明先生_X自主閱讀 1,074評(píng)論 0 0
  • 總是有一些細(xì)小的奋刽,看不見(jiàn)瓦侮、摸不著的東西,在我腦子里游蕩杨名,它們是什么脏榆?它們從哪里來(lái)猖毫?來(lái)這里又是要干什么台谍?我不得...
    故云寒閱讀 495評(píng)論 0 5
  • 戲里戲外的雙重詮釋比只看戲里要過(guò)癮。戲里看演員演技吁断,戲外看演員本人趁蕊。 它讓我們見(jiàn)識(shí)了更多演員戲外的部分,加深了演員...
    Demi_f5bc閱讀 187評(píng)論 0 0