배경
- 학부연구생 업무 중에, dicom파일을 서버에 전송하는 작업이 필요했다
- 보내는 형식은 2가지로 생각했다
- dicom파일을 그대로 multipart/form-data 형식으로 보내는 방법
- 장점 : 파일을 그대로 효율적으로 전송할 수 있다
- 단점 : 파일 정보를 함께 보내기 어렵다
- dicom파일을 base64로 인코딩하여 application/json 형식으로 보내는 방법
- 장점 : 파일 정보를 함께 보낼 수 있다
- 단점 : 인코딩으로 인해서 원본 파일보다 용량이 커진다
- dicom파일을 그대로 multipart/form-data 형식으로 보내는 방법
- 파일의 정보도 함께 구조화하여 보내기 위해 json형태로 보내는 방식을 택하였다
구현
- dicom파일 -> base64
1// Encode a file to BASE64 2 const readFileAsync = (file) => { 3 return new Promise((resolve, reject) => { 4 // 비동기적으로 파일을 읽어오기 위해 FileReader 객체를 생성 5 const reader = new FileReader(); 6 7 // 읽기가 끝나면 수행 8 reader.onload = (evt) => { 9 resolve(evt.target.result); 10 }; 11 12 // 에러가 발생하면 reject 13 reader.onerror = reject; 14 15 // 파일을 Base64로 인코딩된 데이터 URL 형식으로 읽어온다 16 reader.readAsDataURL(file); 17 }); 18 };
- 위 함수는 파일을 base64로 인코딩하여 promise를 반환한다
- 결과
1data:application/octet-stream;base64,AAAAAAAAAAAAAAAAA...