ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
accept 属性とは
<input type="file"> の accept 属性は、ユーザーが選択できるファイルの種類を制限する属性です。OS のファイル選択ダイアログでフィルタがかかり、対象外のファイルは選択しづらくなります。
ただし、これはあくまでUX 上のヒントであり、ユーザーが「すべてのファイル」表示に切り替えれば回避可能。サーバー側の MIME / 拡張子チェックは必須です。
3 つの指定方法
| 形式 | 例 | 意味 |
|---|---|---|
| 拡張子 | .jpg / .png | ドットから始まる文字列 |
| MIME タイプ | image/jpeg / application/pdf | 特定タイプを直接指定 |
| ワイルドカード | image/* / video/* / audio/* | カテゴリ単位で許可 |
基本構文
<!-- 拡張子で指定 -->
<input type="file" accept=".jpg">
<!-- MIME タイプで指定 -->
<input type="file" accept="image/jpeg">
<!-- 画像ファイル全般 (ワイルドカード) -->
<input type="file" accept="image/*">
<!-- 複数指定 (カンマ区切り) -->
<input type="file" accept=".jpg,.jpeg,.png,.gif">
<!-- 拡張子と MIME を混在 -->
<input type="file" accept=".pdf,application/msword,
application/vnd.openxmlformats-officedocument.wordprocessingml.document">
よく使う MIME タイプ早見
| 種類 | MIME タイプ | 拡張子 |
|---|---|---|
| JPEG 画像 | image/jpeg | .jpg .jpeg |
| PNG 画像 | image/png | .png |
| GIF 画像 | image/gif | .gif |
| WebP 画像 | image/webp | .webp |
| SVG 画像 | image/svg+xml | .svg |
application/pdf | .pdf | |
| CSV | text/csv | .csv |
| Excel (xlsx) | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet | .xlsx |
| Word (docx) | application/vnd.openxmlformats-officedocument.wordprocessingml.document | .docx |
| MP4 動画 | video/mp4 | .mp4 |
| MP3 音声 | audio/mpeg | .mp3 |
| ZIP | application/zip | .zip |
| JSON | application/json | .json |
multiple 属性で複数ファイル選択
<!-- 複数の画像ファイルを同時選択可 -->
<input type="file" accept="image/*" multiple>
<!-- 動画も同時に -->
<input type="file" accept="image/*,video/*" multiple>
スマホ向け capture 属性 — カメラ起動
スマホでは capture 属性でカメラを直接起動できます。Web アプリで写真を取らせるときに便利。
<!-- リアカメラ (アウトカメラ) -->
<input type="file" accept="image/*" capture="environment">
<!-- フロントカメラ (インカメラ) -->
<input type="file" accept="image/*" capture="user">
<!-- 動画撮影 -->
<input type="file" accept="video/*" capture="environment">
JavaScript でのバリデーション
accept は選択ダイアログのフィルタに過ぎないので、選択後にクライアント側でも検証することが多い。
const input = document.querySelector('input[type="file"]');
input.addEventListener('change', (e) => {
const file = e.target.files[0];
if (!file) return;
// 拡張子チェック
const allowedExt = ['jpg', 'jpeg', 'png', 'gif'];
const ext = file.name.split('.').pop().toLowerCase();
if (!allowedExt.includes(ext)) {
alert('画像ファイル (JPG/PNG/GIF) を選択してください');
e.target.value = '';
return;
}
// MIME タイプチェック
if (!file.type.startsWith('image/')) {
alert('画像ファイルのみアップロード可能です');
e.target.value = '';
return;
}
// サイズチェック (5MB 以下)
const MAX_SIZE = 5 * 1024 * 1024;
if (file.size > MAX_SIZE) {
alert('ファイルサイズは 5MB 以下にしてください');
e.target.value = '';
return;
}
});
サーバー側の検証 — 必須
クライアント側の制限は容易に回避可能。サーバー側で必ず:
- MIME タイプ (リクエストヘッダだけでなく、ファイルの実体から検出)
- 拡張子
- ファイルサイズ
- マジックナンバー (ファイル冒頭のバイト列で本物の形式を判定)
- ファイル名サニタイズ (パストラバーサル防止)
定番パターン
プロフィール画像アップロード
<label>
プロフィール画像
<input type="file" name="avatar"
accept="image/jpeg,image/png,image/webp"
required>
</label>
CSV インポート
<input type="file" name="csvfile"
accept=".csv,text/csv,application/vnd.ms-excel">
申請書アップロード (PDF / Word)
<input type="file" name="document"
accept=".pdf,.doc,.docx,
application/pdf,
application/msword,
application/vnd.openxmlformats-officedocument.wordprocessingml.document">
FAQ
Q: accept を指定したのに違う拡張子が選べる
A: OS のダイアログでフィルタを「すべてのファイル」に切り替えると無効。クライアント / サーバー側で再検証すること。
Q: スマホでカメラが起動しない
A: capture 属性は対応ブラウザのみ。iOS Safari / Android Chrome は対応。古い WebView では非対応のことあり。
Q: 拡張子と MIME はどちらを書くべき?
A: 両方書くのが鉄則。Windows と Mac、ブラウザによって挙動が違うので念のため両方指定する。
関連
- コンテントタイプの一覧 — MIME タイプの全リスト
input要素の他の属性 (required/multiple/capture)FileReader/FileAPI — JavaScript でファイルを読み込む
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
同階層のページ
同階層のページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Unreal Engine AI MoveTo 完全ガイド(NavMesh / AIController / Behavior Tree) 2026-06-11 07:10:02
- Laravel ルート認証化完全ガイド — middleware と Gate 2026-06-11 07:10:02
- EJB完全ガイド(Stateless/Stateful/Singleton/MDB/CDIとの違い/Spring代替) 2026-06-11 07:10:02
- CDI完全ガイド(Inject/Produces/Qualifier/Scope/Spring DIとの違い) 2026-06-11 07:10:02
- DI(依存性注入)完全ガイド(Dependency Injection / IoC / Spring / CDI / コンストラクタ・セッター注入) 2026-06-11 07:10:02
- TCP/IP リンク層 (ネットワークインターフェース層) 完全ガイド 2026-06-11 07:10:02
- Apache .htaccess でベーシック認証を設定する手順(.htpasswd / htpasswd / AuthType Basic / トラブルシュート) 2026-06-11 07:10:02
- Python アプリのローカル独立配布完全ガイド(PyInstaller / wheel / Docker) 2026-06-11 07:10:02
- git 用語一覧完全リファレンス(Repository / HEAD / Branch / Rebase / Stash 他) 2026-06-11 07:10:02
- EJS テンプレートの共通化 (include) 完全ガイド 2026-06-11 07:10:02
- JAX-RS 完全ガイド(Java EE で REST API 開発 / @Path / @GET / Jersey / RESTEasy) 2026-06-11 07:10:02
- shutdown コマンド完全ガイド(Linux / Windows / systemd の使い分け) 2026-06-11 07:10:02
- Laravel のインストール手順まとめ — composer / Sail / Valet / Herd と初期設定 2026-06-11 07:10:02
- Python set 入門 — 作成方法、frozenset、内包表記、リスト重複削除 2026-06-11 07:10:02
- git log コミット履歴確認完全ガイド — oneline/graph/stat/blame 2026-06-11 07:10:02
コメントを削除してもよろしいでしょうか?