<input type=file>は、選択ファイルを表す際に使用します。
input要素のtype属性の値に file を指定すると、 要素の値は選択されたファイルのリストを表します。
各ファイルは、ファイル名、ファイルタイプ、ファイル本体で構成されます。
multiple属性は、複数の値を許可するかどうかを指定します。 multiple属性が設定されていない限り、選択したファイルのリストには複数のファイルがあってはなりません。
accept属性を指定すると、どのファイルタイプが受け入れられるかのヒントをユーザーエージェントに提供できます。 特定の形式のデータに制限したい場合には、MIMEタイプと対応する拡張子の両方を指定することが推奨されています。
以下のサンプルは、multiple属性の指定の有無による違いを示しています。 multiple属性を指定しなければ選択できるファイルはひとつだけですが、 multiple属性を指定すると選択できるファイルが複数になります。
<p><label>ファイル(ひとつだけ): <input type=file name=ofile></label></p>
<p><label>ファイル(複数選択可): <input type=file name=mfile multiple></label></p>
以下のサンプルは、Microsoft Wordドキュメントを Open Document Formatファイルに変換するアプリケーションを想定しています。 Microsoft Wordドキュメントは様々なMIMEタイプ、様々な拡張子の可能性があるため、 それらをカンマ区切りで指定してします。
<input type="file"
accept=".doc,.docx,.xml,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document">
拡張子は、曖昧になる傾向があります。 例えば、「.dat」拡張子を使用する形式は数え切れないほどあります。 また、Microsoft Word文書でなくても、ファイルの名前を簡単に変更して「.doc」拡張子を付けることができます。
MIMEタイプは、信頼性が低い傾向があります。 例えば、多くのファイル形式には正式に登録されたMIMEタイプがなく、 実際には異なるMIMEタイプを使用してラベル付けされていることが少なくありません。
上記などの理由から、ユーザーに悪意が無く、 ユーザーエージェントがaccept属性を完全にサポートしているとしても、 クライアントから受信したデータは予期した形式ではない可能性があります。 そのため、accept属性によるチェックを無条件に信頼するのではなく、 クライアントから受信したデータは慎重に扱う必要があります。