最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue與axios上傳視頻并顯示上傳進(jìn)度情況

 更新時(shí)間:2026年02月24日 09:04:52   作者:little_shallot  
本文講述了項(xiàng)目中實(shí)現(xiàn)上傳視頻并顯示上傳進(jìn)度的功能,首先使用axios庫(kù)進(jìn)行單文件引入,未進(jìn)行封裝,通過element組件庫(kù)實(shí)現(xiàn)選擇文件上傳,并打印選擇文件的信息,上傳完成后,可以在展示區(qū)域顯示上傳的視頻,鼠標(biāo)移入播放區(qū)域時(shí)會(huì)有相應(yīng)的效果

做項(xiàng)目難免會(huì)有各種各樣的需求,這次是上傳視頻并顯示上傳進(jìn)度,好的我們開始吧

首先引入axios

我這里是單文件引入,沒有使用封裝

import axios from 'axios'

主要用到的參數(shù)有

      exception: '-', //進(jìn)度條當(dāng)前狀態(tài)
      videolist: [], // 視頻合集
      progress: 0, // 進(jìn)度條
      video: '',  //保存預(yù)留地址

需要個(gè)觸發(fā)選擇文件上傳的按鈕

這里用的element做為布局

   <el-form-item label="視頻">
        <div>
        	//限制上傳完成才能上傳下一個(gè)
          <label v-if="progress === 0" class="btn" for="uploadvideo">上傳視頻</label>
          <label v-else class="btn" @click="uploading">上傳視頻</label>
          <input
            id="uploadvideo"
            style="display:none;"
            type="file"
            accept="video/*"
            @change="selectvideo($event)"
          >
        </div>
      </el-form-item>

  // 未上傳完成阻止
    uploading() {
      this.$message({
        message: '請(qǐng)等待上傳完成',
        type: 'error'
      })
    },

accept(選擇的文件格式),點(diǎn)擊上傳之后選擇文件會(huì)觸發(fā)事件回調(diào),打印如下:

拿到之后就可以上傳到服務(wù)器了

 // 上傳視頻
    selectvideo(e) {
      this.exception = '-'
      const file = e.target.files[0] // 獲取選中的文件
      if ([
        'video/mp4',
        'video/ogg',
        'video/flv',
        'video/avi',
        'video/wmv',
        'video/rmvb',
        'video/mov'
      ].indexOf(file.type) === -1
      ) {
        // layer.msg('請(qǐng)上傳正確的視頻格式')
        return false
      }
      if (!file.size) {
        // layer.msg('視頻大小不能超過50MB')
        return false
      }
      const reader = new FileReader()
      reader.onload = e => {
        let data
        if (typeof e.target.result === 'object') {
          data = window.URL.createObjectURL(new Blob([e.target.result]))
        } else {
          data = e.target.result
        }
        this.videosrc = data
        // 獲取轉(zhuǎn)換后的地址地址
      }
      // 轉(zhuǎn)化為base64
      reader.readAsDataURL(file)
      const formData = new FormData() // 創(chuàng)建form對(duì)象
      formData.append('file', file) // 通過append向form對(duì)象添加數(shù)據(jù)const res = await upLoadImage(formData);
      axios({
        url: this.apiUrl + '/file',
        method: 'post',
        data: formData,
        headers: { 'Content-Type': 'multipart/form-data', Authorization: `${this.uploadHeaders.Authorization}` },
        // 原生獲取上傳進(jìn)度的事件
        onUploadProgress: progressEvent => {
          const process = ((progressEvent.loaded / progressEvent.total) * 100) | 0
          this.progress = process
        }
      }).then(res => {
        this.$message({ message: `上傳${res.data.msg}`, type: 'success' })
        // 進(jìn)度條變成成功狀態(tài)
        this.exception = 'success'
        // 延時(shí)初始化進(jìn)度條
        setTimeout(() => {
          this.progress = 0
          // 數(shù)據(jù)填充 獲取本地轉(zhuǎn)化為base64的地址和上傳成功地址
          this.videolist.push({ data: this.videosrc, src: this.apiUrl + '/file/getImgStream?idFile=' + res.data.data.realFileName })
        }, 500)
      }).catch(_error => {
        this.$message({ message: `上傳失敗`, type: 'error' })
        // 進(jìn)度條變成失敗狀態(tài)
        this.exception = 'exception'
        // 延時(shí)初始化進(jìn)度條
        setTimeout(() => { this.progress = 0 }, 2000)
      })
      //   防止第二次同一個(gè)文件不能選中
      e.target.value = ''
    },

然后上傳完成之后就是展示區(qū)域

 <el-form-item>
        <div class="list-image">
          <div v-for="(item,index) in videolist" :key="index">
            <video class="video" :src="item.data" alt="" />
            <span><i class="el-icon-delete" @click="deletevideo(index)" /><i
              class="el-icon-caret-right"
              style="font-size: 23px;margin-left: 5px;"
              @click="pay(index)"
            /></span>
          </div>
          <el-progress
            v-if="progress"
            type="circle"
            :percentage="progress"
            style="height: 126px; width: 126px;"
            :status="exception"
          />
        </div>
      </el-form-item>

中間好像不顯示,可以自行修改

遮罩樣式

.list-image {
  width: 600px;
  display: flex;
  flex-wrap: wrap;
  div,
  .videolist {
    width: 150px;
    height: 150px;
    display: inline-block;
    position: relative;
    margin-right: 30px;
    margin-bottom: 30px;
    border-radius: 6px;
    overflow: hidden;
    transition: opacity 0.3s;
    img,
    video {
      width: 100%;
      height: 100%;
    }
    span {
      position: absolute;
      width: 100%;
      height: 100%;
      left: 0;
      top: 0;
      cursor: default;
      text-align: center;
      color: #fff;
      opacity: 0;
      font-size: 20px;
      background-color: rgba(0, 0, 0, 0.5);
      transition: opacity 0.3s;
      display: flex;
      align-items: center;
      justify-content: center;
      i:hover {
        cursor: pointer;
      }
    }
  }
  div:hover span {
    opacity: 1;
    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.5);
  }
}

鼠標(biāo)移上去的事件

    // 刪除
    deletevideo(e) {
      this.videolist.splice(e, 1)
      this.video = ''
    },
    // 播放
    pay(index) {
      this.video = this.videolist[index].data
      this.dialogTableVisible = true
    },
    // 彈窗消失清空地址
    close() {
      this.dialogTableVisible = false
      this.video = ''
    }

播放區(qū)域

   <el-dialog :visible.sync="dialogTableVisible" style="text-align: center" :before-close="close">
        <video :src="video" controls="controls" autoplay width="500px" />
      </el-dialog>

效果:

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue實(shí)現(xiàn)購(gòu)物車的全選、單選、顯示商品價(jià)格代碼實(shí)例

    Vue實(shí)現(xiàn)購(gòu)物車的全選、單選、顯示商品價(jià)格代碼實(shí)例

    這篇文章主要介紹了Vue實(shí)現(xiàn)購(gòu)物車的全選、單選、顯示商品價(jià)格實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • vue之ele多級(jí)聯(lián)組件的使用方法詳解

    vue之ele多級(jí)聯(lián)組件的使用方法詳解

    這篇文章為大家詳細(xì)主要介紹了vue之ele多級(jí)聯(lián)組件的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • vue使用腳手架vue-cli創(chuàng)建并引入自定義組件

    vue使用腳手架vue-cli創(chuàng)建并引入自定義組件

    這篇文章介紹了vue使用腳手架vue-cli創(chuàng)建并引入自定義組件的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • vue打包配置相對(duì)路徑實(shí)現(xiàn)過程

    vue打包配置相對(duì)路徑實(shí)現(xiàn)過程

    文章主要討論了在Vue項(xiàng)目中配置請(qǐng)求攔截器的`baseUrl`以及Vue Router的`base`屬性的一致性問題,無論是使用hash模式還是history模式,相對(duì)路徑都必須通過hash模式來確保正確性
    2025-11-11
  • vue-cli實(shí)現(xiàn)異步請(qǐng)求返回mock模擬數(shù)據(jù)

    vue-cli實(shí)現(xiàn)異步請(qǐng)求返回mock模擬數(shù)據(jù)

    網(wǎng)上有不少使用mockjs模擬數(shù)據(jù)的文章,但基本都是本地?cái)r截請(qǐng)求返回?cái)?shù)據(jù),本文主要介紹了vue-cli實(shí)現(xiàn)異步請(qǐng)求返回mock模擬數(shù)據(jù),文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • el-table表格點(diǎn)擊該行任意位置時(shí)也勾選上其前面的復(fù)選框

    el-table表格點(diǎn)擊該行任意位置時(shí)也勾選上其前面的復(fù)選框

    本文主要介紹了在el-table組件中實(shí)現(xiàn)雙擊表格某一行任意位置自動(dòng)勾選復(fù)選框的功能,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02
  • Vue實(shí)現(xiàn)文件切片上傳功能的示例代碼

    Vue實(shí)現(xiàn)文件切片上傳功能的示例代碼

    在實(shí)際開發(fā)項(xiàng)目過程中有時(shí)候需要上傳比較大的文件,然后呢,上傳的時(shí)候相對(duì)來說就會(huì)慢一些,so,后臺(tái)可能會(huì)要求前端進(jìn)行文件切片上傳。本文介紹了Vue實(shí)現(xiàn)文件切片上傳的示例代碼,需要的可以參考一下
    2022-10-10
  • Vue.js組件props數(shù)據(jù)驗(yàn)證實(shí)現(xiàn)詳解

    Vue.js組件props數(shù)據(jù)驗(yàn)證實(shí)現(xiàn)詳解

    這篇文章主要為大家詳細(xì)介紹了Vue.js組件props數(shù)據(jù)驗(yàn)證的實(shí)現(xiàn)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • 在Vue中使用CSS3實(shí)現(xiàn)內(nèi)容無縫滾動(dòng)的示例代碼

    在Vue中使用CSS3實(shí)現(xiàn)內(nèi)容無縫滾動(dòng)的示例代碼

    這篇文章主要介紹了在Vue中使用CSS3實(shí)現(xiàn)內(nèi)容無縫滾動(dòng)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • vue觸發(fā)真實(shí)的點(diǎn)擊事件跟用戶行為一致問題

    vue觸發(fā)真實(shí)的點(diǎn)擊事件跟用戶行為一致問題

    這篇文章主要介紹了vue觸發(fā)真實(shí)的點(diǎn)擊事件跟用戶行為一致問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03

最新評(píng)論

西华县| 鄂尔多斯市| 台北县| 孝义市| 西和县| 体育| 临颍县| 云霄县| 从江县| 若羌县| 双城市| 榆树市| 灌云县| 东乡族自治县| 定陶县| 蓬莱市| 高邑县| 临颍县| 文成县| 丹寨县| 阿荣旗| 宜都市| 阿拉善左旗| 徐州市| 区。| 北辰区| 禹州市| 乌审旗| 神农架林区| 察哈| 攀枝花市| 英超| 米易县| 化隆| 莱阳市| 夏邑县| 彰化市| 罗山县| 镇安县| 香格里拉县| 平谷区|