简体   繁体   English

发送来自JAX-RS的Exel响应到AngularJS

[英]Send Exel response from JAX-RS to AngularJS

I am trying to generate Exel using apache-poi in my JAX-RS Service, and sending application/vnd.ms-excel response to angularJs application. 我试图在我的JAX-RS服务中使用apache-poi生成Exel,然后将application / vnd.ms-excel响应发送到angularJs应用程序。 file is successfully gets downloaded, but data inside is encoded. 文件已成功下载,但内部数据已编码。


@POST
@Path("getExelStreamDocDB")
@Produces("application/vnd.ms-excel")
public Response getExelStreamDoc(String req) {
    File file = new File("Excel.xls");
    Workbook workbook = new XSSFWorkbook();
    Sheet sheet = workbook.createSheet("report");
    for (int i = 0; i < 6; i++) {
        Row newRow = sheet.createRow(i);
        for (int j = 0; j < 1; j++) {
            newRow.createCell(j).setCellValue("Ankush");
        }
    }
    for(int i = 0; i < 1; i++) {
        sheet.autoSizeColumn(i);
    }

    FileOutputStream fos=null;

    try {
        fos = new FileOutputStream(file);
        workbook.write(fos);
        fos.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

    ResponseBuilder response = Response.ok((Object)file);
    response.header("Content-Disposition","attachment; filename=poi-generated-file.xlsx");
    return response.build();
}

AngularJS AngularJS

$scope.downloadExcel = function() {
            exelService.getExcel({}).then(function(data) {
                console.log(data);
                 var blob = new Blob([data], {type: "application/vnd.ms-excel"});
                    var objectUrl = URL.createObjectURL(blob);
                    window.open(objectUrl);

}) })

On Testing Service using SOAP UI, I am getting the below response 在使用SOAP UI的Testing Service上,我得到以下响应

<data contentType="application/vnd.ms-excel" contentLength="3368">UEsDBBQACAgIAJVbi00AAAAAAAAAAAAAAAALAAAAX3JlbHMvLnJlbHOtksFqwzAMhl/F6N447WCMUbeXMuhtjO4BNFtJTGLL2NqWvf3MLltLChvsKCR9/wfSdj+HSb1RLp6jP3XTgqJo2fnYG3g+PazuQBXB6HDiSAYiw363faIJpW6UwaeiKiIWA4NIute62D8CloYTxdrpOAeUWuZeJ7Qj9qQ3bXur808GnDPV0RnIR7cGdcLckxiYJ/3OeXxhHpuKrT8/RL8J5a7zlg5sXwNFWci+mAC97LL5dnFsHzPXTUzpv2VoFoqO3CrVBMriqVwzulkwspzpb0rXP6IDCToU/KJeCOmzH9h9AlBLBwinjHq94wAAAEkCAABQSwMEFAAICAgAlVuLTQAAAAAAAAAAAAAAABMAAABbQ29udGVudF9UeXBlc10ueG1stVPLbsIwEPyVyNcqNvRQVRU/Qx/HFqn0A1x7k1j4Ja+h8PddBziUUokKcfJjZmdmV/ZktnG2WkNCE3zDxnzEKvAqaOO7hn0sXup7VmGWXksbPDTMBzabThbbCFhRqceG9TnHByFQ9eAk8hDBE9KG5GSmY+pElGopOxC3o9E/UMFn8LnORYNNJ0/QypXN1ePuvkg3TMZoP5KZUom110ei9V4/J7ADB3sT8YYIrHreP8quG0KRiTMcjgvLmereaC7JaPhXtNC2Rj8OauWohENR1aDrmIiYsj99zrlM+VU6EhREnhOKgqT5Jd6Hsag/4CzDQrzI8ahbjAmkxh4gO8uxlwn0e070mH6H2Fjxg3DFHHlrT0yhBBg/a06AVu6k8afcv0JafoawvJ5/cRj2f9kPIIphGR9yiOF7T78BUEsHCHqUynE7AQAAHAQAAFBLAwQUAAgICACVW4tNAAAAAAAAAAAAAAAAEAAAAGRvY1Byb3BzL2FwcC54bWxNjsEKwjAQRO+C/xByb7d6EJE0pSCCJ3vQDwjp1gaaTUhW6eebk3qcGebxVLf6RbwxZReolbu6kQLJhtHRs5U/+6U6yk5vN2pIIWJih1mUB+VWzszxBD/tjN7kusxUlikkb7jE9IQwTc7iOdiXR2LYN80BcGWkEccqfj9Sqz7GxVnDRUL30RSkGG5XBf+9gp+D/gBQSwcINm6DIZMAAAC4AAAAUEsDBBQACAgIAJVbi00AAAAAAAAAAAAAAAARAAAAZG9jUHJvcHMvY29yZS54bWxtP9tKxDAURX8l5L1N0nGkhLaDKAOC4oAVxbc/HNticyGJdvx70zpWUN+S7HUWJ7vaHfWI3sGHwZoas5xiBEZaNZiuxg/tPisxClEYJUZroMbG4l1TScel9XDw1j8/AwSUNCZw6Wrcx+g4IUH2oEXIE2FS+GK9FjFdfUecP6+iA1JQek40RKFEFGQWZm414pNSyVXp3vy4CJQkMIIGEwNhOSM/bASvw78DS7KSxzCs1DRN+bRZuLQRI0+3N/fL8tlg5q9LwE11UnPpQURQKAl4/HCpke/kcXN51e5xU1BWZqzIGGvplm9LfkafK/JrfhZ+P61vLlIhPaDD3fXMrc8V+VNz8wlQSwcIhDU/pgUBAACwAQAAUEsDBBQACAgIAJVbi00AAAAAAAAAAAAAAAAUAAAAeGwvc2hhcmVkU3RyaW5ncy54bWwlP0EKwjAQRfeCdwizt9O6KCJpigieQA8Q2tEEm0nNJOLxP7h8/8F/evyERb0piT88QNe0oIinOHt+DHC7XnYHGM12o0WymmLhPEAPqrB/FTr/uQNVT1gGcDmvR0SZHAUrTVyJq7nHFGyumB4oayI7iyPKYcF92/YYrGcwWrzR2Zz4WcRpzEbjb8HaNV9QSwcIb7jnfz8AAAClAAAAUEsDBBQACAgIAJVbi00AAAAAAAAAAAAAAAANAAAAeGwvc3R5bGVzLnhtbKWSsW7DIBCG90p9B8Te4GSoosomQyVXP5NKXYk526hwWEAiu09fME6TTB063d3P/R+Hz+VuNJqcwXllsaLrVUEJYGOlwq6iH4f6aUt3/PGh9GHSsO8BAokO9BXtQxheGPNND0b4lR0A40lrPxEhlq5jfnAgpE8mo9mmKJ6ZEQopL/FkahM8aewJQ0ULynjZWrwqa5oFXvpvchY6Kmm22NZYbR1RKGEEWdFt0lAYyF2vQqujUzNPGKWnLG+SME+69BmF1iWR5Vvm4KNJaf07xIZmP5eDCAEc1rEgS36YBqgoWoSMmfv+6JbCfb05Md045hAvPlon4xZu358lXmpoQzQ41fUpBjuwdBiCNTGRSnQWhU7Ii2NJIrYBrfdpdZ/tHXtsSd7Bu0yfn6TnX9I40JJmTC4S/5aW2f/GkrG9589odv3d+A9QSwcIrpGT1kUBAACjAgAAUEsDBBQACAgIAJVbi00AAAAAAAAAAAAAAAAPAAAAeGwvd29ya2Jvb2sueG1sP47LTsMwEEX3SPyDNXtqhyIEUZxuKqTuWBT2rjNprMYPzbgtnz+TKsCSlXV1zxzfZvPlR3FBYheDhmqlQGCwsXPhqOFj//bwApv2/q65RjodYjyJwgfWMOScainZDugNr2LCUJo+kje5RDpKToSm4wEx+1E+KvUsvXEBboaa/uOIfe8sbqM9ewz5JiEcTS5reXCJof1Z9k6iMxmrV/WkoTcjI8i2mZpPh1f+BacojM3ugntz0KAmTv4B583LK4LxqD8wRcogqHZdSbtuDWLudyVWs2E5k8tH7TdQSwcIeD+yMtoAAABeAQAAUEsDBBQACAgIAJVbi00AAAAAAAAAAAAAAAAaAAAAeGwvX3JlbHMvd29ya2Jvb2sueG1sLnJlbHOtkU1rwzAMQP+K0X1x0sEYo24vY9Dr1v0AYytxaCIZS/vov5+7w9ZABzv0JIzwew+03n7Ok3nHIiOTg65pwSAFjiMNDl73Tzf3YEQ9RT8xoQNi2G7Wzzh5rT8kP1lMRT84SKr5wVoJCWcvDWekuum5zF7rsww2+3DwA9pV297Zcs6AJdPsooOyix2YvS8DqgNJvmB80VLLpKngujpm/D+W+34M+MjhbUbSC3a7gIO9HLM6i9HjhNev+Kb+pb/91X9wOUhC1FN5Hd21S34Epxi7uPbmC1BLBwiGAzuR1AAAADMCAABQSwMEFAAICAgAlVuLTQAAAAAAAAAAAAAAABgAAAB4bC93b3Jrc2hlZXRzL3NoZWV0MS54bWyFkslqwzAQhu+FvoPQvVZWpwTbIaWE9lAoXc+yPbZFLMtIkzg/35FSTKDQHCzPoO+fVcnmpFt2BOuU6VI+PyacQVeYUnV1yj8/dnf3fJPd3iSDsXvXACAjQedS3iD2ayFc0YCWLjI9dHRTGaslkmtr4XoLsgwi3YrZZBILLVXHs6RUGjqfkVmoUr4/rh9iLrIksF8KBndhM586N2bvP+cy5VQiyvwdWigQyEd7AK8Wf+S7UM2rZSVU8tDimxmeQNUNUqdLapVEhWldOJlWfgCcaXkK/0GV2KR8FcXzeDW9Xy05Kw4OP/4+X4S0LAeHO4UXVZwjhvw/EmWWWDMw60NSHm9sKTgJHPnHbJKIoxfRR9wIz0Z4dh2eP/D8OrwY4cV1eDnCy+twPMLxP7C4mEwva3iRtlY/Y7lBmi1tN/KTroxBsN6jlhp6RqPTQoU/4syeVxlsNP2v1u9gfK3ZD1BLBwggYRwlXgEAAOECAABQSwECFAAUAAgICACVW4tNp4x6veMAAABJAgAACwAAAAAAAAAAAAAAAAAAAAAAX3JlbHMvLnJlbHNQSwECFAAUAAgICACVW4tNepTKcTsBAAAcBAAAEwAAAAAAAAAAAAAAAAAcAQAAW0NvbnRlbnRfVHlwZXNdLnhtbFBLAQIUABQACAgIAJVbi002boMhkwAAALgAAAAQAAAAAAAAAAAAAAAAAJgCAABkb2NQcm9wcy9hcHAueG1sUEsBAhQAFAAICAgAlVuLTYQ1P6YFAQAAsAEAABEAAAAAAAAAAAAAAAAAaQMAAGRvY1Byb3BzL2NvcmUueG1sUEsBAhQAFAAICAgAlVuLTW+4538/AAAApQAAABQAAAAAAAAAAAAAAAAArQQAAHhsL3NoYXJlZFN0cmluZ3MueG1sUEsBAhQAFAAICAgAlVuLTa6Rk9ZFAQAAowIAAA0AAAAAAAAAAAAAAAAAfAUAAHhsL3N0eWxlcy54bWxQSwECFAAUAAgICACVW4tNeD+yMtoAAABeAQAADwAAAAAAAAAAAAAAAAD8BgAAeGwvd29ya2Jvb2sueG1sUEsBAhQAFAAICAgAlVuLTYYDO5HUAAAAMwIAABoAAAAAAAAAAAAAAAAAEwgAAHhsL19yZWxzL3dvcmtib29rLnhtbC5yZWxzUEsBAhQAFAAICAgAlVuLTSBhHCVeAQAA4QIAABgAAAAAAAAAAAAAAAAALwkAAHhsL3dvcmtzaGVldHMvc2hlZXQxLnhtbFBLBQYAAAAACQAJAD8CAADTCgAAAAA=</data>

can you try this..? 你可以试试这个吗?

      $scope.downloadExcel = function() {
            exelService.getExcel({}).then(function(data) {
            var data = window.atob(data);
                var buf = new ArrayBuffer(data.length * 2);
                var bufView = new Uint8Array(buf);
                var file;

                for (var i = 0, strLen = data.length; i < strLen; i++) {
                    bufView[i] = data.charCodeAt(i);
                }

                file = new Blob([buf], { type: 'application/vnd.ms-excel' });
                this.fileURL = URL.createObjectURL(file);
                window.open(this.fileURL);
           })

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM