0Pricing
React Academy · レッスン

ファイル入力とファイルデータの読み取り

を扱い、ファイルのメタデータを読み取り、FileReaderで画像をプレビューします

「ファイル入力とファイルデータの読み取り」はCoddyKit上の無料React Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReact Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 React Academyコースには全4レッスンが含まれています。

ようこそ

このレッスンでは、Reactでファイル入力を扱い、ファイルのメタデータを読み取り、選択した画像をプレビューし、FileReader APIを使ってファイルの内容を処理します。

ファイル入力要素

``要素は、Reactのvalue propsでは制御できず、常に非制御です。onChangeハンドラー内で`e.target.files[0]`から選択したファイルを読み取ります。
function FileInput() {
  const handleChange = (e) => {
    const file = e.target.files[0];
    console.log(file.name, file.size, file.type);
  };
  return <input type="file" onChange={handleChange} />;
}

Fileオブジェクトのプロパティ

FileオブジェクトはBlobを拡張したもので、次のプロパティを持ちます:`name`(ファイル名)、`size`(バイト数)、`type`('image/png'のようなMIMEタイプ)、`lastModified`(タイムスタンプ)。アップロードまたは処理の前にこれらを読み取ります。

特定のファイルタイプを受け入れる

ブラウザーに表示するファイルタイプを伝えるには、`accept`属性を使います。MIMEタイプと拡張子を組み合わせます。サーバー側でも必ずバリデーションしてください。
<input type="file" accept="image/png,image/jpeg,.pdf" />

複数ファイルの選択

複数のファイルを選択できるようにするには、`multiple`属性を追加します。`e.target.files`はFileListを返すため、配列のメソッドを使うには`Array.from()`で配列に変換します。
<input type="file" multiple />

const files = Array.from(e.target.files);

URL.createObjectURLで画像をプレビューする

`URL.createObjectURL(file)`を使って、選択した画像ファイルの一時的なプレビューURLを作成します。メモリを解放するため、使い終わったら`URL.revokeObjectURL`でURLを無効にすることを忘れないでください。
const [preview, setPreview] = useState(null);

const handleChange = (e) => {
  const file = e.target.files[0];
  if (file) setPreview(URL.createObjectURL(file));
};

useEffect(() => {
  return () => { if (preview) URL.revokeObjectURL(preview); };
}, [preview]);

{preview && <img src={preview} alt="Preview" />}

FileReaderでファイルの内容を読み取る

`FileReader` APIを使うと、ファイルの内容をテキストまたはデータURLとして読み取れます。テキストファイルには`reader.readAsText(file)`を、画像などのバイナリファイルには`reader.readAsDataURL(file)`を呼び出します。
const reader = new FileReader();
reader.onload = (e) => setContent(e.target.result);
reader.readAsText(file);

ファイルサイズのバリデーション

アップロード前にクライアント側でファイルサイズを検証します。しきい値を超えるファイルを拒否し、エラーメッセージを表示します。
const MAX_SIZE = 5 * 1024 * 1024; // 5 MB
if (file.size > MAX_SIZE) {
  setError('File must be under 5 MB');
  return;
}

ファイル入力をクリアする

ファイル入力は値を設定してクリアできません(読み取り専用です)。代わりに、refを使って命令的にリセットするか、入力の`key`propsを変更して強制的に再マウントします。
const inputRef = useRef();
const clear = () => { inputRef.current.value = ''; };
<input ref={inputRef} type="file" />

ファイル参照をstateに保存する

Fileオブジェクト自体をstateに保存します(名前やURLだけではありません)。これにより、後でDOMから再度読み取らずにファイルをアップロードできます。
const [file, setFile] = useState(null);
const handleChange = (e) => setFile(e.target.files[0] || null);

確認問題

ブラウザーで選択した画像ファイルをプレビューするための一時URLを作成するメソッドはどれですか?

まとめ

選択したファイルはe.target.filesから読み取ります。プレビューにはURL.createObjectURLを、内容の読み取りにはFileReaderを使い、クライアント側でサイズを検証し、後でアップロードできるようにFileオブジェクトをstateに保存します。

次へ

次のレッスン:**ドラッグ&ドロップによるファイルアップロードUI** — Reactのイベントを使って、視覚的なフィードバックを備えたドラッグ&ドロップゾーンを作成します。

よくある質問

「ファイル入力とファイルデータの読み取り」レッスンは無料ですか?

はい。「ファイル入力とファイルデータの読み取り」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、React Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 React Academyコースには全4レッスンが含まれています。

「ファイル入力とファイルデータの読み取り」で何を学びますか?

を扱い、ファイルのメタデータを読み取り、FileReaderで画像をプレビューします ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

React Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのReact Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「ファイル入力とファイルデータの読み取り」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このReact Academyレッスンでコードを書いて実行できますか?

はい。すべてのReact Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. useRefによる非制御入力
  2. ファイル入力とファイルデータの読み取り
  3. ドラッグ&ドロップによるファイルアップロードUI
  4. バックエンドAPIへのファイルアップロード
← React Academyに戻る