NestJS, Express 등에서 Multer를 사용해 파일 업로드 기능을 구현할 때,
한글로 된 파일명을 업로드하면 다음과 같이 문자가 깨지는 문제를 겪을 수 있다.
예를 들어, 클라이언트에서 한글파일명.jpg를 업로드했을 때
file.originalname 값이 다음처럼 출력될 수 있다:
이 문제는 인코딩 방식의 불일치 때문에 발생한다.
Multer는 originalname을 디코딩할 때 latin1(ISO-8859-1) 방식으로 처리한다.결국 UTF-8 인코딩된 문자열을 latin1로 잘못 해석해서 문자가 깨져버리는 것!
깨진 문자열을 복구하려면, 다시 버퍼로 변환해서 UTF-8로 재해석하면 된다.
const fixedFileName = Buffer.from(file.originalname, 'latin1').toString('utf8');
Multer는 originalname을 latin1로 해석한다.
한글이 깨진다면, Buffer.from(..., 'latin1').toString('utf8')으로 복원하자.
파일명 로깅이나 S3 Key 생성 시 꼭 이 처리 과정을 거치는 걸 추천!
Multer GitHub Issues
Node.js Buffer 공식 문서: https://nodejs.org/api/buffer.html