js通过pos请求下载excel文档

通过get请求下载excel文件有个限制是请求参数长度受限,改为post方式获取excel文件流到页面实现。

方式一:JQ实现

function downLoadFile(options) {
     $.ajax({
        type: 'POST',
        url : options.url,
        data: options.data,
        complete: function( xhr,data ){
            var fileName = xhr.getResponseHeader("Content-Disposition").split(";")[1].split("filename=")[1];
            var fileNameUnicode = xhr.getResponseHeader("Content-Disposition").split("filename*=")[1];
            if (fileNameUnicode) {
                fileName = decodeURIComponent(fileNameUnicode.split("''")[1]);
            }
            var blob = new Blob([xhr.response], { type: "application/vnd.ms-excel" });
            //var blob = new Blob([ajaxRequest.response], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" });
            var objectUrl = URL.createObjectURL(blob);
            var a = document.createElement("a");
            document.body.appendChild(a);
            a.style = "display: none";
            a.href = objectUrl;
            a.download = fileName;
            a.click();
            document.body.removeChild(a);
        }
    });
}

 方式二:原生js实现

function downLoadFile(options) {
    var sendData = JSON.stringify(options.data);
    var ajaxRequest = new XMLHttpRequest();
    ajaxRequest.responseType = 'arraybuffer';
    ajaxRequest.onreadystatechange = function () {
        if (ajaxRequest.readyState == 4 && ajaxRequest.status == 200) {
            var fileName = ajaxRequest.getResponseHeader("Content-Disposition").split(";")[1].split("filename=")[1];
            var fileNameUnicode = ajaxRequest.getResponseHeader("Content-Disposition").split("filename*=")[1];
            if (fileNameUnicode) {
                fileName = decodeURIComponent(fileNameUnicode.split("''")[1]);
            }
            var blob = new Blob([ajaxRequest.response], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" });
            var objectUrl = URL.createObjectURL(blob);
            var a = document.createElement("a");
            document.body.appendChild(a);
            a.style = "display: none";
            a.href = objectUrl;
            a.download = fileName;
            a.click();
            document.body.removeChild(a);
        }
        else if (ajaxRequest.status == 409 || ajaxRequest.status == 500 || ajaxRequest.status == 204) {
            //alert(ajaxRequest.status);
        }
    }
    ajaxRequest.open("POST", options.url, true);
    ajaxRequest.setRequestHeader("Content-Type", "application/json");
    ajaxRequest.send(sendData);
}

 调用参数option数据结构为{url:'post请求的服务器路径',data:'post的参数json结构'}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌晨4点5杀老大爷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值