[spring] DB 데이터 csv파일 다운로드 기능

공수정·2021년 11월 1일
0

spring

목록 보기
5/32

1. 라이브러리 추가

  1. pom.xml 파일
  2. 자신의 junit버전에 맞게 commons-csv 라이브러리 추가
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-csv -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-csv</artifactId>
    <version>1.5</version>
</dependency>

2. controller 작성

  1. url 맵핑

    @RequestMapping(value = "/download/csv", method = RequestMethod.GET)
    public ResponseEntity<byte[]> downloadCSV(){
        ...
    }

    리턴을 "ResponseEntity<byte[]>"으로 해서 url을 연결시켜 줍니다.

  2. DB에서 csv 파일로 받을 데이터 가져오기
    그리고 csv 파일로 만들 데이터를 가져옵니다.

  3. 가져온 데이터로 csv파일 만들기

    1. 헤더 만들기
    byte[] csvFile = null;
    String[] cols = {"컬럼1", "컬럼2"}
    CSVPrinter csvPrinter = null;
    StringWriter sw = new StringWriter();
    
    try{
    	csvPrinter = new CSVPrinter(sw, CSVFormat.DEFAULT.withHeader(cols));
    }
    • cols 라는 string 배열에 컬럼명을 지정해서 넣습니다.
    1. 실제 데이터 넣기
    for (Word word : words) {
      List<String> data  = Arrays.asList(
        String.valueOf(word.getId()),
        word.getNameKor()            		   
      );
      csvPrinter.printRecord(data);
    }
    sw.flush();
    csvFile = sw.toString().getBytes("UTF-8");
    • 이 코드문을 1번 try문에 넣습니다. 이때 Word는 제가 작성한 DTO입니다. DTO를 사용하지 않으셨다면 HashMap<String, String>을 이용하셔도 됩니다.
    1. 그리고 마지막 finally 블럭에서 csvPrinter를 close()합니다.
  4. csv 파일 return 보내기

    HttpHeaders header = new HttpHeaders();
    header.setContentType(MediaType.valueOf("plain/text"));
    header.set(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=저장할 파일이름.csv");
    header.setContentLength(csvFile.length);
    return new ResponseEntity<byte[]>(csvFile, header, HttpStatus.OK);
    • 마지막으로 이렇게 return 하면 됩니다.

3. 다운로드 요청

  1. 다운로드 요청은 location.href ="지정한 url" 으로 하시면 바로 다운로드가 진행 됩니다.

참고
1. 파일 다운로드(excel,csv)

profile
계속해서 공부하는 개발자입니다 :)

0개의 댓글