使用Angular从API下载pdf文件

时间:2017-06-12 09:40:50

标签: angularjs pdf download

Method: PUT 

Endpoint :

/application1/file/{filetype}/transactionType {
    "accountNumber":"344224433344333"
}

API将返回CSV / pdf / xls

类型的文件

问题:

如何在新标签页中打开或下载起诉angularJs 1.5

我尝试了一些解决方案,但它在IE中无效 https://codepen.io/waghanil87/pen/vZBozE

提前致谢!

1 个答案:

答案 0 :(得分:1)

您需要将base64字符串转换为blob类型然后再加载/打印

function b64toBlob(b64Data,callback) {
    var contentType = 'application/pdf'; // put your file type here 
    var sliceSize = 512;
    b64Data = b64Data.replace(/^[^,]+,/, '');
    b64Data = b64Data.replace(/\s/g, '');
    var byteCharacters = window.atob(b64Data);
    var byteArrays = [];

    for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
        var slice = byteCharacters.slice(offset, offset + sliceSize);

        var byteNumbers = new Array(slice.length);
        for (var i = 0; i < slice.length; i++) {
            byteNumbers[i] = slice.charCodeAt(i);
        }

        var byteArray = new Uint8Array(byteNumbers);

        byteArrays.push(byteArray);
    }

    blob = new Blob(byteArrays, {
        type: contentType
    }); 

    callback(blob)
}

function downloadData(fileName,blob) {
    var a = document.createElement("a");
    var url = window.URL.createObjectURL(blob);

    document.body.appendChild(a);
    a.style = "display: none";
    a.href = url;
    a.download = fileName;
    a.click();
    window.URL.revokeObjectURL(url); 

}

// call it like this 

b64toBlob(base64string,function(data){
    function downloadData('sample.pdf',data)
})