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結構'}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章