element+vue文件分片上传七牛云

该博客演示了如何使用Element UI组件库和Vue.js,结合七牛云提供的SDK,实现文件的分片上传功能。通过一个实际的DEMO,详细解释了上传过程和关键代码。

element+vue实现文件上传七牛云

根据七牛云sdk示例做的一个demo
七牛云文件上传sdk文档

<template>
  <div>
    <el-upload
      class="upload-demo"
      drag
      :limit="1"
      :before-upload="handleBeforeUploadVideo"
      :http-request="requestFile"
      :on-remove="removeFile"
      action=""
      >
      <i class="el-icon-upload"></i>
      <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
    </el-upload>
    <!-- 进度条 -->
    <el-progress  v-if="progressFlag" :percentage="loadProgress"></el-progress>
    <el-button id="myBtn" v-if="progressFlag" size="mini">{{buttonText}}</el-button>
  </div>
</template>
<script>
  import * as qiniu from 'qiniu-js'
  export default {
    data() {
      return {
        loadProgress: 0, // 动态显示进度条
        progressFlag: false, // 关闭进度条
        buttonText: "暂停上传"
      };
    },
    methods: {
      //移除文件
      removeFile() {
        this.progressFlag = false;
        this.buttonText = "暂停上传";
      },
      //上传之前
      handleBeforeUploadVideo(file) {
        //上传之前重新获取uptoken以免过期
        // console.log(file)
        this.progressFlag = true;
      },
      //
      uploadWithSDK(token,putExtra,config,domain,file) {
        let that = this;
        console.log("token,",token);
        console.log("putExtra,",putExtra);
        console.log("config,",config);
        console.log("domain,",domain);
        console.log("domain,",file);
        if (file) {
          let key = file.name;
          // putExtra.customVars["x:name"] = key.split(".")[0];
          // 设置next,error,complete对应的操作,分别处理相应的进度信息,错误信息,以及完成后的操作
          let error = function(err) {
            console.log(err);
          };

          let complete = function(res) {
            console.log(res);
          };

          let next = function(response) {
            console.log(response);
            that.loadProgress = response.total.percent;
          };

          let subObject = {
            next: next,
            error: error,
            complete: complete
          };
          // 调用sdk上传接口获得相应的observable,控制上传和暂停
          let observable = qiniu.upload(file, key, token, putExtra, config);
          let subscription = observable.subscribe(subObject);

          //监听按钮事件,控制上传
          that.$nextTick(function () {
            document.getElementById("myBtn").addEventListener("click", function(){
              console.log("1111111111111111111111111111111111111111")
              if(that.buttonText == "暂停上传"){
                that.buttonText = "继续上传";
                subscription.unsubscribe();
              }else if(that.buttonText = "继续上传"){
                that.buttonText = "暂停上传";
                subscription = observable.subscribe(subObject);
              }
            });
          })

        }

      },
      requestFile(param) {
        console.log("request,",param)
        let file = param.file;
        //uptoken
        let token = "";
        //外链域名
        let domain = "";
        //可以配置分片大小等配置,具体查看官方文档
        let config = {
          useCdnDomain: true,//是否使用CDN加速域名
          disableStatisticsReport: false,//是否禁用日志报告
          retryCount: 6//上传自动重试次数
        };
        let putExtra = {
          customVars: {}
        };
        this.uploadWithSDK(token,putExtra,config,domain,file)
      }
    },
    created () {
      
    }
  }
</script>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值