axios 结合 七牛云 实现简单 上传和下载进度条实现

公司没有做自己的文件服务器,用了七牛云。有时候需要上传或者下载一些大的文件,也没有用qiniu-sdk,查了下 axios 的文档,发现有onDownloadProgress , onUploadProgress 这两个配置,可以拿到当前的上传/下载进度。

大概类似这样。直接贴代码.

/**
 * 
 * @param {*} file input拿到的file
 * @param {*} type 文件后缀
 * @param {*} cb 监控进度条callback
 * @param {*} errorCb 错误回调
 */
export const qiniuUpload = async (file,cb,errorCb) =>{
  //获取文件后缀
  const sufix = getFileSufix(file.name);
  const token_url = `${CONFIG.qiniu_token_url}/1/?prefix=zone`;	
  const params = {
    type: sufix || '',
  }
  if(!params.type){
    delete params.type
  }
  const response = await API.get(token_url,params);
  const data = new FormData();
  const key = response.data.data.fileKey;
  const host = response.data.bucket_url;
  data.append('token', response.data.data[0].token);
  data.append('file', file);

  const res = await axios({
    url: CONFIG.qiniu_url,
    method: 'post',
    //回调上传回调事件 progressEvent 可以拿到当前loaded以及total.计算出大小以及进度条
    
    onUploadProgress(progressEvent){
        if(progressEvent.lengthComputable && cb){
            cb(progressEvent)
        }
    },
  data: data,
  //timeout一般默认为5000ms,上传大文件时会超时,这里设置没有超时时间
  timeout: 0,
  withCredentials: false,
  headers: {'Content-Type': 'multipart/form-data', 'Access-Control-Allow-Origin': '*'},
  }).catch((e) =>{
    if(errorCb){
      errorCb();
    }
  });
  if(res.status ===200){
    const fileUrl = host + "/" + res.data.key
    const result = {
      status: res.status,
      fileUrl: fileUrl,
    }
    return result;
  }else{
    return {status:400}
  }
}
复制代码

没有做断点续传功能,凑合着用

转载于:https://juejin.im/post/5a9ad1bff265da239e4d8851

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值