본문 바로가기

과거공부모음

20230306 TIL - S3 파일 업로드 문제

Today I learned

오늘은 S3파일 업로드 시 문제가 발생해서 해결했다

나는 테스트를 진행하면서 에러를 발견하지 못했는데 팀원이 테스트를 진행하면서 에러가 발생을 했다고 한다

나는 되는데 팀원이 안된다고 하니 접근 권한의 문제인가 싶었다

하지만 같은 IAM을 공유하고 있고 S3도 퍼블릭 권한을 가지고 있어서 문제가 없어보였다

 

 

 

문제는 Windows와 Mac의 운영체제의 문제였다

나는 Windows고 팀원은 Mac을 사용하고 있다 이 부분에서 내가 다른 운영체제를 고려하지 않아서 발생하는 문제였다 웹 서버를 개발하는데 Windows만 접속한다는 상황은 없다 내가 코드를 잘못 작성했다

 

 

 

const fileName = image.path.split('\\\\')[3];

이런식으로 진행했는데 Mac은 //이고 Windows는 \\로 path가 구성된다

이 부분때문에 key로 사용되는 fileName이 없어서 key을 입력하라는 에러를 발생시켰다

 

 

 

그리고 다른 문제가 하나 더 있다 바로 한글 파일의 경우 한글이 깨지는 문제다

포스트맨으로 테스트하면 한글이 깨지지 않는다 근데 웹에서 axios로 테스트하면 한글이 깨진다

Content-Type': 'multipart/form-data;

axios로 form-data를 사용하면 인코딩을 지정할 수 없는 문제였다

그래서 이 문제도 같이 해결해야한다

 

 

 

해결해보자

const file = Buffer.from(image.originalName, 'latin1').toString('utf-8');
const ext = path.extname(file)
const basename = path.basename(file, ext)
const fileName = `${basename}-${new Date().getTime()}${ext}`

buffer to string으로 utf-8로 한글 깨짐 문제를 해결하고 path를 이용해서 운영체제 상관없지 fileName을 지정하는 방식으로 진행했다

 

 

 

이번에 배운 부분은 여러 운영체제를 생각해서 Windows에서만 돌아가는 방식으로 처리하지 말자

최대한 node에서 지원하는 함수로 처리하자