在JS中发送ajax请求,并且解析后台返回的Blob类型数据,将数据转换为文件

在JS中如何发送ajax请求,并且解析后台返回的Blob类型数据,将数据转换为文件导出,附带兼容IE8等浏览器

普通的jQuery中的ajax请求后台,并不能处理Blob类型的数据,这里用的原生的XMLHttpRequest请求后台

这里是做报表导出功能的一种实现:

//点击-报表导出-执行事件

function reportExport(){

// 获取页面当前选中记录行

var rows = $('#datagridTable').datagrid('getSelections');



// 判断是否有选中记录

if (rows.length == 0) {

    $.walk.alert("请先选中需要导出的数据!", "info");

    return;

}


$.walk.confirm("确定要导出选中的数据吗?", function(data) {

if (!data) {

    return false;

}



//组装数据-这个参数用来在后台查询SQL获取导出数据用

var tradeIds = "";

for (var i = 0; i < rows.length; i++) {

    tradeIds += rows[i].TRADE_ID + ",";

}



var originName = "物流配送日交接单";//导出文件的名称设置

var url = baseUrl + "/logisticsStatus/saveDeliverRecords";//设置后台请求映射

var xhr = new XMLHttpRequest();

xhr.open('POST', url, true); // 设置请求方式POST方式

xhr.responseType = "blob"; // 返回类型blob

xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");//设置请求内容类型

// 请求回调函数,在请求后台完成,后台返回数据后执行此方法onload

xhr.onload = function() {


if (this.status != 200) {// 判断请求状态码,看请求是否成功执行

    $.walk.alert("导出失败!", "info");

    return;

}

var content = this.response; //获取后台响应内容
//解析后台返回的文件内容,这里主要是处理Blob类型
var excelBlob = new Blob([ content ], {type : 'application/vnd.ms-excel'});

var fileName = originName + ".xlsx";//

//浏览器兼容处理
if (isIE()) {

    window.navigator.msSaveOrOpenBlob(excelBlob, fileName);

} else {

    var a = document.getElementById("exportbtn");

    a.href = URL.createObjectURL(excelBlob);

    a.download = fileName;

    a.click();

    a.href = "";

}


    //数据导出成功后,刷新前台列表 datagrid
    $('#datagridTable').datagrid("reload");

};

    // 发送ajax请求
    xhr.send("tradeIds=" + tradeIds + "&originName=" + originName);

});

}



//判断是否IE浏览器

function isIE() {

    if (!!window.ActiveXObject || "ActiveXObject" in window) {

    return true;

    } else {

    return false;

    }

}
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是在网页使用 JavaScript 将 base64 数据转换文件的完整示例: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Base64 to File</title> </head> <body> <input type="file" id="file-input"> <button id="convert-button">Convert to File</button> <script> function base64ToFile(base64String, filename, mimeType) { const byteCharacters = atob(base64String); const byteNumbers = new Array(byteCharacters.length); for (let i = 0; i < byteCharacters.length; i++) { byteNumbers[i] = byteCharacters.charCodeAt(i); } const byteArray = new Uint8Array(byteNumbers); const blob = new Blob([byteArray], { type: mimeType }); const url = URL.createObjectURL(blob); const link = document.createElement('a'); link.href = url; link.download = filename; document.body.appendChild(link); link.click(); document.body.removeChild(link); URL.revokeObjectURL(url); } document.getElementById('convert-button').addEventListener('click', () => { const input = document.getElementById('file-input'); if (input.files && input.files.length > 0) { const file = input.files[0]; const reader = new FileReader(); reader.onload = () => { const base64String = reader.result.split(',')[1]; base64ToFile(base64String, file.name, file.type); }; reader.readAsDataURL(file); } }); </script> </body> </html> ``` 这个示例包含一个文件输入框和一个“转换文件”的按钮。当您选择一个文件并单击按钮时,它将读取文件内容并将其转换为 base64 编码。然后,它使用 `base64ToFile` 函数将 base64 编码转换文件,并下载该文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值