Невозможно получить файл Excel в объекте ответа в контроллере остальной загрузки весной - PullRequest
0 голосов
/ 22 ноября 2018

Я экспортирую данные своей базы данных в лист Excel с помощью весенней загрузки.Я могу создать и загрузить лист Excel в своем браузере, но я не могу отправить этот файл Excel в моей организации Response. Когда я отправляю свой URL для загрузки Excel через почтальона, я получаю несколько необработанных ответов, как я могу преобразовать его такчто он отображает содержимое файла клиенту.Вот мой кодМожете ли вы предложить мне, где я делаю неправильно.

вот мой класс обслуживания, который генерирует Excel и сохраняет его в байтовом массиве.

    public byte[] exportToExcelFile() throws IOException {
    List<Employee> list = dao.getEmployee();

      XSSFWorkbook workbook = new XSSFWorkbook(); 
      XSSFSheet sheet = workbook.createSheet("Employee");
      XSSFRow row = sheet.createRow(1);

    // create style for header cells
        CellStyle style = workbook.createCellStyle();
        Font font = workbook.createFont();
        font.setFontName("Arial");
        style.setFillForegroundColor(HSSFColor.BLUE.index);
        style.setFillPattern(CellStyle.SOLID_FOREGROUND);
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        font.setColor(HSSFColor.WHITE.index);
        style.setFont(font);

      // create header row
      XSSFRow header = sheet.createRow(0);

        header.createCell(0).setCellValue("sl nO");
        header.getCell(0).setCellStyle(style);

        header.createCell(1).setCellValue("Name");
        header.getCell(1).setCellStyle(style);

        header.createCell(2).setCellValue("Email");
        header.getCell(2).setCellStyle(style);

        header.createCell(3).setCellValue("Salary");
        header.getCell(3).setCellStyle(style);
        int rowCount = 1;

        for (Employee emp : list) {
            XSSFRow  aRow = sheet.createRow(rowCount++);
            aRow.createCell(0).setCellValue(emp.getId());
            aRow.createCell(1).setCellValue(emp.getName());
            aRow.createCell(2).setCellValue(emp.getEmail());
            aRow.createCell(3).setCellValue(emp.getSalary());
        }

        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try {
            workbook.write(bos);
        } finally {
            bos.close();
        }
        byte[] bytes = bos.toByteArray();
       // FileOutputStream out = new FileOutputStream(new File("employee.xlsx"));
         //workbook.write(out);
          //out.close();
          System.out.println("exceldatabase.xlsx written successfully");
        return bytes;
}

вот мой контроллер покоя для загрузки Excel.

@RestController
public class MyController {
@Autowired
EmployeeService service;

@GetMapping(value = "/exportExcel")
public ResponseEntity exportEmployeeExcel(HttpServletResponse response) throws IOException {
    byte[] excelContent = service.exportToExcelFile();
    if (excelContent.length != 0) {

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

        return new ResponseEntity(excelContent, HttpStatus.OK);

    } else {

        return new ResponseEntity("download fail", HttpStatus.NO_CONTENT);
    }
}

}

1 Ответ

0 голосов
/ 22 ноября 2018

Не могли бы вы попробовать это:

@CrossOrigin
@ResponseBody
@GetMapping(value = "/exportExcel")
public ResponseEntity<InputStreamResource> exportEmployeeExcel(HttpServletResponse response) throws IOException {
        byte[] excelContent = service.exportToExcelFile();
    if (excelContent.length != 0) {
        String fileName = "example.xlsx";
            MediaType mediaType = MediaType.parseMediaType("application/vnd.ms-excel");
            File file = new File(fileName);
            FileUtils.writeByteArrayToFile(file, excelContent);
            InputStreamResource resource = new InputStreamResource(new FileInputStream(file));

            return ResponseEntity.ok()
                    // Content-Disposition
                    .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + file.getName())
                    // Content-Type
                    .contentType(mediaType)
                    // Contet-Length
                    .contentLength(file.length()) //
                        .body(resource);
        }else{
            return null; // you can return what you want !
        }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...