Ich habe diesen Controller, der ein leeres Blatt erstellen und ich möchte die Excel-Datei an den Navigator zurückgeben. Das Problem ist, die Excel-Datei ist beschädigt.Spring - Download Excel mit POI
Wenn ich die Datei auf meinem Computer erstellen, ist die Datei nicht beschädigt, so dass mein HSSFWorkbook gültig ist. Scheint ein Problem der Kodierung/Einkapselung durch den Frühling Kontext hinzugefügt?
@Controller
public class ExportController {
@RequestMapping(value = "/export/test/excel", method = RequestMethod.POST)
public void downloadExcelTestFile(
HttpServletRequest request,
HttpServletResponse response) throws IOException {
HSSFWorkbook wb = new HSSFWorkbook();
wb.createSheet("Sheet1");
//response.reset();
//response.setStatus(HttpServletResponse.SC_OK);
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=test.xls");
OutputStream out = response.getOutputStream();
wb.write(out);
out.flush();
out.close();
wb.close();
}
Der Download gut starten, erhalte ich die Datei test.xls, aber ich kann es nicht öffnen. Gibt es einen Frühling Weg, um einen richtigen Download in einem @Controller zu erreichen?
Ich benutze Frühling 4.2.4
UPDATE 1
ich einen Frühling Art und Weise versucht, aber es funktioniert nicht besser
HSSFWorkbook wb = new HSSFWorkbook();
wb.createSheet("Sheet1");
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
wb.write(bos);
} finally {
bos.close();
}
byte[] bytes = bos.toByteArray();
HttpHeaders headers = new HttpHeaders();
headers.set("Content-Type", "application/vnd.ms-excel;");
headers.set("content-length",Integer.toString(bytes.length));
headers.set("Content-Disposition", "attachment; filename=test.xls");
return new ResponseEntity<byte[]>(bytes, headers, HttpStatus.CREATED);
UPDATE 3
fand ich ein Grund, aber ich verstehe nicht warum.
Wenn ich meine WAR-Datei erstellen und manuell im selben Tomcat 7.0.70 bereitstellen, funktioniert es. Mein Excel ist nicht beschädigt.
Wenn ich von der Dev-Umgebung in Eclipse herunterladen, funktioniert es nicht. Scheint ein tomcat + eclipse-Problem.
Sie können versuchen, eine org.springframework.core.io.FileSystemResource zurückzugeben, die eine Datei als Eingabe akzeptiert. – mrkernelpanic