빈 시트를 만드는이 컨트롤러가있어서 탐색기로 Excel 파일을 반환하고 싶습니다. 문제는 Excel 파일이 손상되었음을 나타냅니다.봄 - POI로 Excel 다운로드
내 컴퓨터에서 파일을 만들면 파일이 손상되지 않으므로 내 HSSFWorkbook이 유효합니다. 봄 문맥에 의해 추가 된 encodage/encapsulation의 문제가 보입니까?
@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();
}
다운로드가 잘 시작되고 파일 test.xls가 표시되지만 열 수 없습니다. @Controller 내부에서 적절한 다운로드를 달성하기위한 Spring 방법이 있습니까?
나는 봄의 방법을 시도 4.2.4
UPDATE 1
봄을 사용하지만 그것은 작동하지 않습니다 더 나은
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
내가 발견 이유는 모르겠지만 그 이유는 모르겠다.
war 파일을 빌드하고 동일한 tomcat 7.0.70에 수동으로 배포하면 작동합니다. 내 Excel이 손상되지 않았습니다.
이클립스에서 dev environnement에서 다운로드하면 작동하지 않습니다. 바람둥이 + 일식 문제가 보입니다.
파일을 입력으로 사용하는 org.springframework.core.io.FileSystemResource를 반환 할 수 있습니다. – mrkernelpanic