Wie zum download xls-Datei mit Winkel-und Spring-Rest-Service?

Ich eine Fabrik in eckig zu nennen, ein Frühlings-rest-Dienst zum herunterladen xls-Datei.

dies ist mein Werk:

angular.module('app')
.factory('SportsbookServiceCustom', function ($http) {
    return {
        exportToXLS: function () {
            return $http.get('api/sportsbooks/downloadXLS').then(function (response) {
                return response.data;
            });
        }
    };
});

Habe ich diesen code für mein rest-service:

@RequestMapping(value = "/sportsbooks/downloadXLS")
public void downloadXLS(HttpServletResponse response) {
    Pageable pageable = new PageRequest(0, 20, Direction.ASC, "id");
    Page<Sportsbook> page = sportsbookRepositoryCustom.findAll(pageable, null, null, null);
    List<Sportsbook> sportsbookList = page.getContent();

    HSSFWorkbook workbook = new HSSFWorkbook();
    HSSFSheet sheet = workbook.createSheet("Sample sheet");

    Map<String, Object[]> data = new HashMap<String, Object[]>();
    data.put("1", new Object[] { "Emp No.", "Name", "Salary" });
    data.put("2", new Object[] { 1d, "John", 1500000d });
    data.put("3", new Object[] { 2d, "Sam", 800000d });
    data.put("4", new Object[] { 3d, "Dean", 700000d });

    Set<String> keyset = data.keySet();
    int rownum = 0;
    for (String key : keyset) {
        Row row = sheet.createRow(rownum++);
        Object[] objArr = data.get(key);
        int cellnum = 0;
        for (Object obj : objArr) {
            Cell cell = row.createCell(cellnum++);
            if (obj instanceof Date)
                cell.setCellValue((Date) obj);
            else if (obj instanceof Boolean)
                cell.setCellValue((Boolean) obj);
            else if (obj instanceof String)
                cell.setCellValue((String) obj);
            else if (obj instanceof Double)
                cell.setCellValue((Double) obj);
        }
    }

    if (workbook != null) {
        //Writing file to outputstream
        try {
            InputStream fileInputStream = new ByteArrayInputStream(workbook.getBytes());
            OutputStream output = response.getOutputStream();
            response.reset();
            response.setContentLength((int) (workbook.getBytes().length));

            response.setContentType("application/vnd.ms-excel");
            response.setHeader("Content-disposition", "attachment;filename=yourFileName.xls");

            IOUtils.copyLarge(fileInputStream, output);
            output.flush();
        }

        catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

Der code läuft ohne Fehler, aber beim herunterladen von Dateien nicht funktioniert. Was ist der Fehler?

"Was ist der Fehler?" - Das ist die Informationen, die wir von Ihnen erwarten. Nichts an den client zurückgeschickt wird? Ist response.data leer? Und vor allem, was möchten Sie tun mit der Antwort? exportToXLS selbst tut nichts. Wenn Sie eine Datei im browser angezeigt oder gespeichert werden, dann einfach eine Verknüpfung erstellen, die der Benutzer klicken kann.

InformationsquelleAutor Vítor Nóbrega | 2015-11-07

Schreibe einen Kommentar