js 前端导出报错 格式不正确_前端js导出,参数以json格式发送post请求

该博客介绍了在前端使用JS导出文件时遇到的格式错误问题,特别是当数据量过大导致接口返回错误。文章通过解析响应的content-disposition头获取文件名,并根据status_code判断错误情况。如果遇到'11060'状态码,说明数据量过大,提示用户缩小查询范围。同时,提供了读取Blob内容的方法,以便在错误时尝试将数据转换为JSON来获取错误信息。
摘要由CSDN通过智能技术生成

//下载excel文件

downLoadFile(url: any, data: any, fileName: any) {

let other=this;//other.messageService.error("ssskkk")

return new Promise((resolve, reject) =>{

let that= this,

options: any={},

loginInfo=UserInfo.loginInfo;

let tenatInfo= AppCommon.currentTenant || "";this.httpClient.post(url, data, {

headers:new HttpHeaders().set('current_tenant', tenatInfo.tenantId)

.set('current_app', AppCommon.currentAppcode || null),

responseType:'blob',

observe:'response'}).subscribe(res=>{//console.log(res);

//var resHeaders = res.headers.toJSON() || {};

console.log(resHeaders);

/**

* 关于Blob 如何获取内容

* https://developer.mozilla.org/zh-CN/docs/Web/API/Blob

* reader.result 包含转化为类型数组的blob*/

var reader = newFileReader();

reader.readAsText(res.body,'utf-8');//reader.readAsArrayBuffer(res.body);

reader.addEventListener("loadend", () =>{

let toJson;try{/**

* 尝试将接口返回的数据转换成json格式

* 接口正常情况下返回的数据流的形式,转成json数据肯定会报错。

* catch捕获后执行文件下载。

*

* 假如能够顺利转成json,说明接口是报错状态,返回的是错误数据*/toJson=JSON.parse(reader.result)

}catch(error) {/** 获取reseponse headers中的 文件名*/

//console.log("ssss");

//alert("ssssssssssss");

let disposition = res.headers.get('content-disposition');

let status_code=res.headers.get('status_code');//console.log(status_code);

//let resHeaders = res.headers.toJSON() || {};

if(status_code=="11060"){//if(status_code==null){

//console.log("ksjk");

//that.messageService.error("ssssssssssss");

//报错

let status_msgs = res.headers.get('status_msg') ||res.headers.get('Status_msg')||[];

let status_msg= status_msgs[0] || "";

let base64= newBase64();

status_msg= base64.decode(status_msg) || "服务异常";

resolve({ error_msg:"数据量过大,不能正常导出,请缩小查询范围"})return;

}

let newfileName= '';if(disposition) {

newfileName= decodeURI(disposition.split('=')[1]);//newfileName=newfileName.substring(0,fileName.length);

fileName =newfileName;

}this.downFile(res.body, fileName);//resolve();

return null;

}//报错

reject(toJson.msg);

});

}, err=>{

reject(err.msg);

})

});

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值