ローカルファイルを読み取るスニペット
公開日:
カテゴリ: JavaScript
JavaScriptで<input type="file">
に入力されたファイルをJavaScript読み取る方法を、何故か毎回忘れる(ここ半年で5回は調べた)のでメモ書きを残しておきます。
基本的な流れ
input[type="file"]
(HTMLInputElement
)のfiles
プロパティに選択したFile
オブジェクトの配列が入るFileReader
を作成しイベントリスナを設定するreadAsArrayBuffer()
やreadAsText()
などでFile
オブジェクトをFileReader
に渡す- 読み取りが完了すると
FileReader
のload
イベントが発火される FileReader
のresult
プロパティに結果が入っているので、あとは煮るなり焼くなりArrayBuffer
として読み取り、結果をResponse
オブジェクトに入れると使い勝手が良いかも
コード
JavaScript
const readFile = async file => {
const reader = new FileReader();
return await new Promise((resolve, reject) => {
reader.addEventListener("load", _ => resolve(reader.result));
reader.addEventListener("error", e => reject(e));
reader.readAsArrayBuffer(file);
});
};
TypeScript
const readFile = async (file: File) => {
const reader = new FileReader();
return await new Promise<ArrayBuffer>((resolve, reject) => {
reader.addEventListener("load", _ => resolve(reader.result as ArrayBuffer));
reader.addEventListener("error", e => reject(e));
reader.readAsArrayBuffer(file);
});
};
使い方例
document.getElementById("file").addEventListener("input", async e => {
const files = e.currentTarget.files;
for (const file of files) {
const response = new Response(await readFile(file));
// ...
}
});
カテゴリ: JavaScript