JavaScript
Blob과 File, FileReader 사용하여 파일(.txt) 읽고 쓰기
citron031
2023. 2. 24. 08:55
blob은 전에도 사용한 적이 있지만, 이번에 다시 사용하며 사용한 내용을 정리하기로 하였다.
- Blob은 JavaScript 네이티브 형태가 아닌 데이터또한 표현할 수 있다.
- File이 Blob에 기반한 인터페이스로, 사용자 시스템의 파일을 지원하기 위해 Blob 인터페이스를 상속해 기능을 확장한 것이다.
- Blob과 File은 생성자를 통해서 인스턴스를 만든다.
import { useState, useEffect } from "react";
const IoComponent = ({setTexts, texts}) => {
const [url, setUrl] = useState("");
useEffect(() => {
const blob = new Blob([texts], {type: "text/plain"});
const file = new File([blob], "your_text.txt");
const url = URL.createObjectURL(file);
setUrl(url);
}, [texts]);
return (
<div>
<a href={url} download="your_text.txt" >다운로드</a>
</div>
);
}
export default IoComponent;
- 위의 코드는 text가 변할 때 마다 File 객체를 새로 생성하고 다운로드 링크를 생성한다.
- 다운로드 버튼을 클릭하면, 해당 파일(.txt)을 내려받을 수 있다.
import { useState } from "react";
const IoComponent = ({setTexts, texts}) => {
const [url, setUrl] = useState("");
const inputFileHandler = (e) => {
const file = e.target.files[0];
const fileReader = new FileReader();
fileReader.readAsText(file);
fileReader.onload = () => {
// 기존 텍스트에 읽은 파일의 텍스트 추가
setTexts(texts + "\n" + fileReader.result);
};
}
return (
<div>
<input type="file" onChange={inputFileHandler}/>
</div>
);
}
export default IoComponent;
- 위의 코드는 input 태그가 있는데 파일을 받을 수 있다.
- 제공받은 파일(.txt)을 FileReader 객체로 읽은 뒤 기존의 텍스트 뒤에 이어붙인다.
https://developer.mozilla.org/ko/docs/Web/API/Blob
Blob - Web API | MDN
Blob 객체는 파일류의 불변하는 미가공 데이터를 나타냅니다. 텍스트와 이진 데이터의 형태로 읽을 수 있으며, ReadableStream으로 변환한 후 스트림 메서드를 사용해 데이터를 처리할 수도 있습니다
developer.mozilla.org
https://developer.mozilla.org/ko/docs/Web/API/File
File - Web API | MDN
File 인터페이스는 파일에 대한 정보를 제공하고, 웹 페이지가 JavaScript로 파일의 내용에 접근할 수 있는 방법을 제공합니다.
developer.mozilla.org