• 前端js下载zip文件异常问题解决


    目录

    一,本文解决问题如下

    二,原下载代码

    1,ajax get 下载文件

    2,下载异常图:

    三,成功下载的

    1, JQuery 实现文件下载xhr

    2,图例


    引言:

    本人使用的ajax 下载,由于下载CSV,文本之类的没有问题,下载zip是出现各种问题。发现是设置responseType:"blob"没生效,项目中又没有maskjs,无法在提交请求之前重新responseType定义。再就是在整个jquery代码中找到实现真是太费眼睛了,后续用xhr实现摆脱了ajax只能下载文本的问题,这个也是处理问题的关键。

    一,本文解决问题如下

    1,mock模块会影响原生的ajax请求,使得服务器返回的blob类型变成乱码
    2,压缩文件出现不可预料的压缩文件末端
    3,后端生成Zip文件通过浏览器下载后文件损坏,无法打开

    posman已经测试了,能正常下载,不是后端的问题

    二,原下载代码

    1,ajax get 下载文件

    1.    $.ajax(
    2.           {type='get',
    3.           url:url,
    4.           timeout=30000,
    5.           msg:param,
    6.           responseType:"blob"//没生效
    7.           },
    8.           
    9.           succes:function(response,status,xhr){
    10.                 let fileName = xhr.getResponseHeader("content-disposition").split(';')[1].split('=')[1].replace(/\"/g,'')
    11.                 let type =  xhr.getResponseHeader("content-type")
    12.                 let blob = new Blob([data],{type:type}) ;设置类型并未生效
    13.                 var link = document.createElement('a');
    14.                 link.download = fileName;
    15.                 link.style.display = 'none';
    16.                 link.href = URL.createObjectURL(blob);
    17.                 document.body.appendChild(link);
    18.                 link.click();
    19.                 URL.revokeObjectURL(link.href);
    20.                 document.body.removeChild(link);
    21.           },
    22.           
    23.           error:function(date){
    24.                console.log("下载失败")
    25.           }
    26.       
    27.       )
    28.       

    2,下载异常图:

    文件损坏

    压缩文件出现不可预料的压缩文件末端


           

    三,成功下载的

    1, JQuery 实现文件下载xhr

    1. var xhr = new XMLHttpRequest();
    2.         xhr.open('get', url, true);    
    3.         xhr.responseType = "blob";  // 返回类型blob
    4.         xhr.setRequestHeader("Content-type", "application/json;charset=utf-8"); 
    5.          xhr.setRequestHeader("msg", "param");
    6.         xhr.onload = function () {
    7.             if (this.status === 200) {
    8.                 var blob = this.response;
    9.                 var reader = new FileReader();
    10.                 reader.readAsDataURL(blob);  // 转换为base64,可以直接放入a标签href
    11.                 reader.onload = function (e) {
    12.                     // 转换完成,创建一个a标签用于下载
    13.                     var a = document.createElement('a');
    14.                     var fileName = xhr.getResponseHeader("content-disposition").split(';')[1].split('=')[1].replace(/\"/g,'')
    15.                     a.download = fileName;
    16.                     a.href = e.target.result;
    17.                     $("body").append(a);  // 修复firefox中无法触发click
    18.                     a.click();
    19.                     $(a).remove();
    20.                 }
    21.             }else{
    22.                console.log("下载失败")
    23.             }
    24.         };
    25.         // 发送ajax请求
    26.         xhr.send(null)

    2,图例

  • 相关阅读:
    java Web 疫苗预约管理系统用eclipse定制开发mysql数据库BS模式java编程jdbc
    计算机网络——码元、波特、速率、带宽
    多分类交叉熵理解
    openfeign客户端A调用服务B,服务B抛出异常时,客户端A接收的几种情况
    一文总结你需要的OpenCV操作
    java的包装类
    传输层——UDP+TCP
    备忘录模式
    elasticsearch5.6设置用户名密码
    Harmony 应用开发之size 脚本
  • 原文地址:https://blog.csdn.net/qq_39308071/article/details/132756149