NestJS csv file download set header

ansunny1170·2023년 7월 10일
1

개발

목록 보기
9/11

시작하는 말

특정 데이터를 csv 형식으로 다운로드 할 수 있는 api를 개발하는 과정에 한글이 깨지는 현상을 고치는 내용입니다.
간단하게 utf-8을 추가해주면 될 것으로 생각했으나... 예상치 못한 방법으로 해결을 했습니다.

참고한 사이트
CSV 파일 만들 때 엑셀에서 한글 깨짐 현상 해결하기 - 제로초
https://smorning.tistory.com/269
https://velog.io/@kim_sunnnny/what-is-applicationoctet-stream

해결한 방법

예상대로라면 아래 한 라인으로 해결 될 것으로 생각했습니다.

res.setHeader('Content-Type', 'text/csv; charset=utf-8-sig') // or charset=utf-8

하지만 csv에서만큼은 여전히 한글 깨짐현상이 있었습니다.
csv string 앞에 \ufeff of \uFEFF 등을 붙이기도 했지만 여젼했습니다.

답답한 마음에 이미지 파일 다운로드에 사용하던 header setting 문구application/octet-stream를 사용했더니 한글 깨짐현상이 사라졌습니다.
물론 \uFEFF 도 추가한 상태여야 합니다.

  @Get('/download/files')
  async downloadFile(
    @Res() res
  ) {
    ...(중략)
    const csvStringifier = createObjectCsvStringifier(dataHeader)

    const csvContent = '\uFEFF' + csvStringifier.getHeaderString() + csvStringifier.stringifyRecords(fileData)
    // 적용이 안됨
    // res.setHeader('Content-Type', 'text/csv; charset=utf-8-sig') // or charset=utf-8
    res.setHeader('Content-Type', 'application/octet-stream')
    res.setHeader('Content-Disposition', 'attachment; filename="data.csv"')
    res.send(csvContent)
  }

마치는 말

인터넷 관련 지식과 기술도 참 많은데, 공부할 거리는 늘어만 나네요! 오늘도 하나 알게되었습니다.


profile
공정 설비 개발/연구원에서 웹 서비스 개발자로 경력 이전하였습니다. Node.js 백엔드 기반 풀스택 개발자를 목표로 하고 있습니다.

1개의 댓글

comment-user-thumbnail
2024년 3월 10일

댓글 남기려고 회원가입 했습니다
큰 도움이 되었습니다. 아량 넓은 지식 공유에 진심으로 감사드립니다.

답글 달기