코딩쌀롱
[JS] input type="file" 파일 읽기 본문
웹에서 파일을 입력 받으려면 HTML에서 input type="file"으로 받을 수 있다.
input 태그에 대해서는 다음 링크를 참조! (input type="file"의 HTML, CSS 링크)
✱ JavaScript 코드
전체적으로 설명하자면,
1. 사용자가 input으로 파일을 선택하면 'change' 이벤트가 발생한다.
2. 파일이 선택되면 input의 'files' 속성에 'FileList' 형태의 유사배열객체가 저장된다.
3. 'FileReader' 객체는 파일을 읽을 수 있게 도와주는 객체다.
4. FileReader의 메서드 readAsText로 텍스트를 읽어올 수 있다.
5. 읽기 성공하면 'load'이벤트가 발생한다.
6. 읽어들인 파일의 내용은 FileReader 객체의 result 속성에 저장된다.
setEvent() {
this.input.addEventListener('change', this.checkFile.bind(this));
}
input 요소에 change 이벤트 핸들러를 연결해준다. 파일 선택이 되면 checkFile 함수가 실행된다.
const currFiles = this.input.files;
input요소의 files 속성으로 선택한 파일들이 담긴 'FileList' 유사배열객체를 변수에 저장한다.
파일 한 개만 선택했을 때 FileList객체를 확인해보면 아래와 같다.
readFile(files) {
const reader = new FileReader();
reader.addEventListener('load', this.parser.bind(this, reader));
reader.readAsText(files[0], 'utf-8');
}
FileReader의 readAsText로 파일의 텍스트를 읽을 수 있다. 먼저 reader 인스턴스를 생성하고, load 이벤트 핸들러를 등록한다. 파일을 성공적으로 읽어오면 load 이벤트가 발생하고 핸들러가 실행된다. 그리고 readAsText 메서드로 파일의 텍스트를 읽는다.
const dataArr = reader.result.split('\r\n');
읽어들인 파일의 내용은 FileReader 객체의 result 속성에 저장된다. result 속성 내의 데이터를 파싱해서 데이터를 사용하면 된다.
참고로 개행마다 split하려고 '\r\n'으로 했는데 좋은 방법은 아닌 것 같다. 데이터를 만들 때 개행을 \r\n으로 한 경우에만 정상적으로 동작하기 때문에...개행마다 split하기 위해서는 다른 방법을 찾아봐야겠다.
참고📚
'개발공부' 카테고리의 다른 글
[Node.js] express 웹 서버 간단하게 만들기 (0) | 2021.02.23 |
---|---|
[Node.js] npm으로 package.json 관리하기 (0) | 2021.02.23 |
[HTML¦CSS] input type='file'로 파일 입력 받기 (0) | 2021.02.07 |
[JS] 마이크로 태스크, 매크로 태스크, 비동기 실행 흐름 이해하기 (7) | 2021.01.27 |