• IE浏览器,文件下载失败,onDownloadProgress方法里报错:无法获取未定义或null引用的属性“getResponseheader“


    问题背景:

    谷歌、火狐、edge都没有问题,ie11浏览器也没有问题,ie10及以下会报错,无法获取未定义或null引用的属性"getResponseheader

     查看代码,getResponseHeader这个方法是在获取进度条的时候使用,

    1. //xml返回数据的钩子函数,可以用来获取数据的进度 具体可查看axios的官网
    2. onDownloadProgress: progressEvent => {
    3. //progressEvent.loaded 下载文件的当前大小
    4. //progressEvent.total 下载文件的总大小 如果后端没有返回 请让他加上!
    5. let progressBar = Math.round((progressEvent.loaded / progressEvent.srcElement.getResponseHeader('x-content-length')) * 100);
    6. // ...其他逻辑操作
    7. }

    在ie10浏览器下,控制台打印 progressEvent 对象,发现 progressEvent.srcElement 为null,其他版本的浏览器 progressEvent.srcElement 是有值的,并且可以通过 getResponseHeader() 获取到响应头里的值。

    修改后:使用 progressEvent?.target?.getResponseHeader() 方法获取,x-content-length需要后端接口设置在响应头中。问题解决

    let progressBar = Math.round((progressEvent.loaded / progressEvent?.target?.getResponseHeader('x-content-length')) * 100);

    这里说一下为什么不使用 progressEvent.total 或者 content-length 来获取下载文件的总大小?

    因为当开启了gzip之后,这两个值是有问题的。影响进度条的准确性,可以和后台约定好一个字段,比如 x-content-length 返回文件总大小,然后通过 progressEvent.target.getResponseHeader('x-content-length') 方法获取就行了。

    问题解决。

  • 相关阅读:
    权限架构~
    ICMP重定向(ICMP redirect)实验分析
    Day41信息收集
    React组件三大属性state,props,refs
    【Python学习笔记】超详细Python快速入门教程(上)
    SpringBoot+Dubbo+Nacos 开发实战教程
    linux中crontab讲解
    学习 MySQL 需要知道的 28 个小技巧
    tensorflow深度学习模型读取parquet数据进行训练实现
    大数据Doris(十二):扩容缩容
  • 原文地址:https://blog.csdn.net/weixin_42289279/article/details/138181696