ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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アノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 2026-06-22 12:19:10
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?