斷點續傳原理及運用


一,斷點續傳(斷點續傳其實就是把文件分割的過程,一段一段的傳。)

斷點續傳需要和后端進行配合進行處理,這里我提供一下后端那邊提供的接口

1,后端接口提供

 

其實原理也很簡單說白了,就是我們把本地的大型文件或者視頻使用slice進行分割,然后傳給后台,同時需要提供給后台當前分割的索引和一共要分成多少份。(廢話不多說,上代碼)

 

2,前端代碼部署

點擊上傳按鈕方法

 

    filesVide() {
      // 視頻上傳
      this.datafile=this.$refs.file.files[0];
      // 上傳的文件的大小
      this.size=(this.datafile.size/1024/1024).toFixed(1);
      this.filesize = this.datafile.size;
      this.fileName = this.datafile.name;
      // 判斷后綴
      var index=this.datafile.name.lastIndexOf('.');
      var type1=this.datafile.name.slice(index+1);
      // 進行判斷是不是mp4格式,如果不是進行提示處理
      if(type1!=='mp4'||this.filesize>1024*1024*500){
        // 提示處理
        this.MP4sp=true;
        this.clearTimers();
        this.$refs.file.value='';
        return;
      }
      // 以下為一些提示處理(可以先不用考慮)
      this.cut=true;
      this.videcut=false;
      this.cutvide=false;
      this.index=0;
      this.baifenbi=0;
      this.suo=true;
      this.start=0;
      this.end=0;
      // 一共多少個片段戳(bytesPerPiece=1024*1024表示每次上傳的大小為1m)
      this.total = Math.ceil(this.filesize / this.bytesPerPiece);
      // 時間戳
      this.timestamp=new Date().getTime();    
      // 進行上傳的代碼片段
      this.pianduanfiles();
    },

 

這個地方是點擊上傳時需要進行的處理。

進行循環執行的代碼

    pianduanfiles(){
      // 用於判斷是否已經結束
      if(this.start < this.filesize&&this.suo){
        // 開始的數量加上每次上傳的數量(bytesPerPiece=1024*1024)每次上傳1m
        this.end = this.start + this.bytesPerPiece;
        // 如果結束時的大小大於文件大小,說明上傳完畢
        if(this.end > this.filesize) {
          this.end = this.filesize;
        }
        // 對開始的值和結束的值就行切割,每次循環開始的值和結束的值默認加1m
        this.chunk = this.datafile.slice(this.start,this.end);//切割文件   
        // 方法執行 
        var  params  =  new  FormData();
        params.append('video', this.chunk);
        params.append('roadShowId',  this.information);
        params.append('fileName',  this.fileName);
        params.append('index', this.index);
        params.append('total',  this.total);
        params.append('timestamp',  this.timestamp);
        axios.post(this.HTTP + 'roadshows/video/investor/add', params , {
          headers: {
            'auth-signature': this.token
          }
        }).then(res => {
          // 調用成功后讓結束的值等於開始的值,同時判斷是否結束續傳如果是300繼續循環執行該方法,如果200說明結束
          this.start=this.end;
          // 當前索引加一
          this.index++;
          // 上傳視頻進行百分比編寫
          this.baifenbi=Math.round((this.index/this.total)*100)
          if(res.data.code==300){
            console.log(res,'300')
            // setTimeout(()=>{
              this.pianduanfiles();
            // },100)
          }
          if(res.data.code==200){
            this.cutvide=true;
            this.url=res.data.data.path;
            console.log(res,'200')
            // this.load()  
          }
          if(res.data.code==4005){
            alert('當前房間未開放視頻上傳功能!')
          }
        }, err => {
          console.log(err);
        })
      }
 },

大致原理,和需要添加的都在代碼里面有注釋,如有什么不明白歡迎評論區提問!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM