axios实现实时获取文件上传/下载进度

复制代码
<template>
  <div>
      <button @click="downLoad">下载</button>

      <p>
          下载进度:{{downLoadProgress}}
      </p>

  </div>
</template>


<script setup>
import { ref } from '@vue/reactivity';
import axios from 'axios'


var downLoadProgress=ref(0) //定义下载进度
//下载
var downLoad=function(){
    axios({
        url:"http://localhost:3232/api/download",
        responseType:'blob',
        params:{
            fileName:'Russ - Psycho (Pt. 2).mp4'
        },
         // onDownloadProgress 配置该属性代表允许为下载处理进度事件
            onDownloadProgress: function (progressEvent) {//axios封装的原生获取下载进度的事件,该回调参数progressEvent中包含下载文件的总进度以及当前进度
         if (progressEvent.lengthComputable) {
                        //属性lengthComputable主要表明总共需要完成的工作量和已经完成的工作是否可以被测量
                        //如果lengthComputable为false,就获取不到progressEvent.total和progressEvent.loaded
                         downLoadProgress.value = progressEvent.loaded / progressEvent.total * 100 //实时获取最新下载进度
                    }
    },
    }).then(res=>{
        console.log(res)
        let link = document.createElement("a");
    link.href = URL.createObjectURL(res.data);
    link.download = '午夜鸡铃.mp4';
    document.body.appendChild(link);
    link.click();
    URL.revokeObjectURL(link.href);

    })
}



</script>
复制代码

 

复制代码
<template>
  <div>
      <input type="file" @change="upload">上传</button>

      <p>
          上传进度:{{upProgress}}
      </p>

  </div>
</template>


<script setup>
import { ref } from '@vue/reactivity';
import axios from 'axios'


var upLoadProgress=ref(0) //定义上传进度
//上传
var upload=function(event){
 
            let file = event.target.files[0] //获取选中的文件
 
            const formData = new FormData() //声明一个formdata对象,用于存储file文件以及其他需要传递给服务器的参数
 
            formData.append('userName', 'admin')
            formData.append('projectId', '735136fcf95a41248cc94127f7963ea8')
            formData.append('file', file)
 
 
            console.log('formData', formData)

    axios({
        url:"http://localhost:3232/api/upload",
            method: 'post',
            headers: {
                Authorization: 'sdfasfsfwrfrwerrrrrrrrrrrfbdddddddddddddd',
                'Content-Type': 'multipart/form-data'
                },
            data: formdata,
            onUploadProgress: function (progressEvent) { //原生获取上传进度的事件
                    if (progressEvent.lengthComputable) {
                        //属性lengthComputable主要表明总共需要完成的工作量和已经完成的工作是否可以被测量
                        //如果lengthComputable为false,就获取不到progressEvent.total和progressEvent.loaded
                      upLoadProgress= progressEvent.loaded / progressEvent.total * 100 //实时获取上传进度
                    }
                }
        
    },
    }).then(res=>{
        console.log(res)


    })
}
复制代码

 

posted @   菜的掉渣  阅读(630)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示