미리보기를 위해 FileReader 사용 시 이미지 여러개 처리
사진 업로드 전, 미리보기를 위한 처리는 금방 했었다.
자바스크립트에 내장되어있는 FileReader를 불러온 후
const reader = new FileReader();
base64로 된 파일의 데이터url를 추출하여 html에 뿌려주면 되었다.
reader.readAsDataURL(file);
reader.onload = () => {
console.log(reader.result)
}
이를 이용하여 다수의 이미지도 미리보기를 구현하려 했었다. for문을 돌려 각각의 파일의 url을 추출해 모아주면 된다고 생각을 했다.
하지만 아무리 어떤 방법을 써도 파일들이 담기긴 하는데, 정작 읽기는 배열의 맨 앞에 있는 최초의 파일만 읽는 것이었다. 속터질 노릇.
해답은 너무 간단했다..
FileReader는 호출되면 하나의 파일만 읽어오고 역할은 끝난다.
그러니 for문 밖에서 FileReader를 선언한 후 돌리니 하나만 읽어올 수 밖에..
for문 안에 선언 후 매 파일 마다 FileReader를 선언해 주었다.
for (let file of Files){
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onloadend = () => {
console.log(reader.result);
}
}
12장 병렬성과 비동기성(p.475 ~ p.476)