• 上传及下载文件时获取进度值并展示(超时时间单独设置)


    最近做了这样一个界面需求,需要监听下载文件时的进度
    在这里插入图片描述

    在这里插入图片描述

    在接口请求工具类中的代码如下:
    文件上传及下载(onUploadProgress方法是关键)

    /****
       * 文件上传,data => new FormData()方式传参
       * @param url
       * @param data
       * @returns {*}
       */
      uploadFilePost (url, data = {}, time = 10000) {
      return service({
          url: url,
          method: 'post',
          headers: {
           'Content-Type': 'multipart/form-data'
          },
          data: data,
           timeout: time
           // 关键代码
           onUploadProgress: function (progressEvent) {
           let complete = (progressEvent.loaded / progressEvent.total * 100 | 0) + '%
           // 发送进度
           EventBus.$emit('noticeProgress', complete)
           }
        })
      },
       /****
       * 文件下载
       * @param url
       * @param params
       * @returns {Promise}
       */
      downloadFile (url, params = {}) {
        return new Promise((resolve, reject) => {
          service.get(url, {
            params: params,
            timeout: 300 * 1000,//数据量大时下载接口请求时间需长一些,单独配置
            responseType: 'blob',
            // 关键代码
            onDownloadProgress: function (progressEvent) {
            const total = params.total ? params.total : progressEvent.total
              if (Object.keys(params).length && total) {
                let complete = (progressEvent.loaded / total * 100 | 0)
                // 发送进度
                EventBus.$emit('noticeDownload', complete)
              }
             }
          }).then(response => {
            resolve(response)
          }).catch(error => {
            reject(error)
          })
        })
      }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    那么在发起文件请求时(此处以下载为例),progressValue是渲染到界面的进度值,代码如下:

      mounted () {
        EventBus.$on('noticeDownload', (res) => {
        // progressValue 就是渲染到界面的进度值
          this.progressValue = res
          if (res === 100) {
          	this.finished = true
          }
        })
       }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    以上就是获取上传及下载进度并渲染到界面的代码。

    另外补充一点,如果需要单独设置某个接口的超时时间(比如有时候某个接口的超时时间需要长一些),可以这样写:
    默认的超时时间为10000毫秒(10秒)

    //默认的超时时间为10000毫秒(10秒)
      get (url, params = {}, time = 10000) {
        return new Promise(((resolve, reject) => {
          service.get(url, { params: params,timeout: time, }).then(response => {
            resolve(response)
          }).catch(error => {
            reject(error)
          })
         }))
      }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    调用:
    此时这个接口的请求时间为30s

    // 此时这个接口的请求时间为30s
    this.$httpService.get(getInfo + `${sn}`, params, 30000).then(res => {}
    
    • 1
    • 2
  • 相关阅读:
    Prometheus Pushgateway简介(二)
    UART串行通信
    把yes/no取消掉
    找不到vcruntime140.dll,无法继续执行代码的详细解决方案
    记录ajax的jsonp类型请求
    JavaSE - 数据类型
    【精讲】async,await简介及与Ajax合用案例(内含面试内容)
    Linux安装JDK
    【Java 进阶篇】JDBC Statement:执行 SQL 语句的重要接口
    springboot初试elasticsearch
  • 原文地址:https://blog.csdn.net/qq_44166697/article/details/126054999