본문 바로가기
공부/프로그래밍

[springboot] 엑셀 다운로드 시 이름지정 및 한글 깨짐 방지

by demonic_ 2021. 2. 10.
반응형

 

POI 를 이용해 엑셀 다운로드기능을 개발할 때, 파일명을 지정하지 않으면 uri의 끝부분을 리턴한다. 다만 이렇게 될 경우 확장자도 붙지 않는다.

 

다음 코드를 확인해 보자

...
    @GetMapping("/api/excel/testHangle")
    public void textExcel(HttpServletResponse response) throws IOException {
        Workbook workbook = new SXSSFWorkbook();
        Sheet sheet = workbook.createSheet();

        int rowIndex = 0;
        Row headerRow = sheet.createRow(rowIndex++);
        Cell headerCell1 = headerRow.createCell(0);
        headerCell1.setCellValue("이름");

        Row bodyRow1 = sheet.createRow(rowIndex++);
        Cell cell1 = bodyRow1.createCell(0);
        cell1.setCellValue("아이유");

        Row bodyRow2 = sheet.createRow(rowIndex++);
        Cell cell2 = bodyRow2.createCell(0);
        cell2.setCellValue("강혜연");

        String fileName = "테스트 한글.xlsx";
        String outputFileName = fileName;
        response.setHeader("Content-Disposition", "attachment; fileName=\"" + outputFileName + "\"");

        workbook.write(response.getOutputStream());
        workbook.close();
    }
...

 

다운로드 파일명을 띄어쓰기 하는 경우 URL의 끝 부분인 testHangle.zip 로 저장되었다. 만약 띄어쓰기가 없는경우 ___.xlsx 등 한글이 깨져서 다운로드 된다.

 

사실상 인코딩의 문제라 다음 한줄만 추가하면 된다.

...
        String fileName = "테스트 한글.xlsx";
        String outputFileName = new String(fileName.getBytes("KSC5601"), "8859_1");
        response.setHeader("Content-Disposition", "attachment; fileName=\"" + outputFileName + "\"");
...

 

다시 다운로드를 시도해보면 제대로 다운로드 되는 것을 확인할 수 있다.

 

 

 

끝.

반응형

댓글