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

目录

一,本文解决问题如下

二,原下载代码

[1,ajax get 下载文件](#1,ajax get 下载文件)

2,下载异常图:

三,成功下载的

[1, JQuery 实现文件下载xhr](#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 下载文件

bash 复制代码
   $.ajax(
          {type='get',
          url:url,
          timeout=30000,
          msg:param,
          responseType:"blob"//没生效
          },
          
          succes:function(response,status,xhr){
                let fileName = xhr.getResponseHeader("content-disposition").split(';')[1].split('=')[1].replace(/\"/g,'')
                let type =  xhr.getResponseHeader("content-type")
                let blob = new Blob([data],{type:type}) ;设置类型并未生效

                var link = document.createElement('a');
                link.download = fileName;
                link.style.display = 'none';
                link.href = URL.createObjectURL(blob);
                document.body.appendChild(link);
                link.click();
                URL.revokeObjectURL(link.href);
                document.body.removeChild(link);

          },
          
          error:function(date){
               console.log("下载失败")
          }
      
      )
      

2,下载异常图:

文件损坏

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

三,成功下载的

1, JQuery 实现文件下载xhr

bash 复制代码
var xhr = new XMLHttpRequest();
        xhr.open('get', url, true);    
        xhr.responseType = "blob";  // 返回类型blob
        xhr.setRequestHeader("Content-type", "application/json;charset=utf-8"); 
         xhr.setRequestHeader("msg", "param");
        xhr.onload = function () {
            if (this.status === 200) {
                var blob = this.response;
                var reader = new FileReader();
                reader.readAsDataURL(blob);  // 转换为base64,可以直接放入a标签href
                reader.onload = function (e) {
                    // 转换完成,创建一个a标签用于下载
                    var a = document.createElement('a');
                    var fileName = xhr.getResponseHeader("content-disposition").split(';')[1].split('=')[1].replace(/\"/g,'')
                    a.download = fileName;
                    a.href = e.target.result;
                    $("body").append(a);  // 修复firefox中无法触发click
                    a.click();
                    $(a).remove();
                }
            }else{
               console.log("下载失败")
            }
        };
        // 发送ajax请求
        xhr.send(null)

2,图例

相关推荐
doll ~CJ2 天前
SQLite的BLOB数据类型与C++二进制存储学习记录
c++·sqlite·blob·图像数据存取·bitset标准库
亚林瓜子13 天前
Mac上面压缩文件出现__MACOSX文件夹问题
macos·zip
fxybg202225 天前
免费版视频压缩软件:让视频处理更便捷
音视频·zip·娱乐·视频编解码·视频
程序员大阳1 个月前
CentOS Linux教程(9)--使用zip压缩解压文件、目录
linux·centos·zip·压缩·解压
青云交1 个月前
大数据新视界 --大数据大厂之数据压缩算法比较与应用:节省存储空间
大数据·数据库·zip·gzip·无损压缩·数据压缩算法·有损压缩·存储空间
baidu_huihui2 个月前
ubuntu打包命令
数据库·postgresql·zip
charlee442 个月前
CMake构建学习笔记12-libzip库的构建
c++·学习·zip·cmake·构建
辞半夏丶北笙2 个月前
word、pdf、excel及zip加密(含示例效果及工具类)
java·pdf·word·excel·zip·poi·加密
WineMonk3 个月前
.NET C# 将文件夹压缩至 zip
c#·.net·zip·压缩
赵丙双4 个月前
spring boot jar 启动报错 Zip64 archives are not supported
spring boot·jar·zip·loader·zip64