HTMLで、アップロードできるファイルの種類を制限するにはどうすればよいですか?
ユーザーエクスペリエンスを容易にするために、ファイルのアップロードを画像(jpeg、gif、png)のみに制限します。
<form method="post" action="..." enctype="multipart/form-data">
<label for="image">Photo</label>
<input name="image" type="file" />
</form>
HTML5は<input type="file" accept="image/*">
と言います。もちろん、クライアント側の検証を決して信用しないでください。常にサーバー側でもう一度確認してください...
HTML5ファイル入力には、accept属性と複数の属性があります。複数の属性を使用すると、インスタンスに複数の画像をアップロードできます。
<input type="file" multiple accept='image/*'>
複数のMIMEタイプを制限することもできます。
<input type="file" multiple accept='image/*|audio/*|video/*' >
ファイルオブジェクトを使用してMIMEタイプをチェックする別の方法。
ファイルオブジェクトはあなたに名前、サイズ、タイプを与えます。
var files=e.target.files;
var mimeType=files[0].type; // You can get the mime type
上記のコードを使用して、アップロードするファイルの種類をユーザーに制限することもできます。
編集済み
物事が本来あるべきものであれば、「Accept」属性を介してこれを行うことができます。
http://www.webmasterworld.com/forum21/6310.htm
ただし、ブラウザはこれをほとんど無視するため、これは無関係です。短い答えは、HTMLでそれを行う方法はないと思います。代わりにサーバー側で確認する必要があります。
次の古い投稿には、代替手段に役立つ情報が含まれています。
これが画像アップロード用のHTMLです。デフォルトでは、accept="image/*"
を入れているため、画像ファイルはブラウジングウィンドウにのみ表示されます。ただし、ドロップダウンから変更することができ、すべてのファイルが表示されます。そのため、Javascriptパーツは、選択したファイルが実際の画像であるかどうかを検証します。
<div class="col-sm-8 img-upload-section">
<input name="image3" type="file" accept="image/*" id="menu_images"/>
<img id="menu_image" class="preview_img" />
<input type="submit" value="Submit" />
</div>
変更イベントでは、まず画像のサイズを確認します。 2番目のif
条件では、画像ファイルかどうかを確認します。
this.files[0].type.indexOf("image")
は、画像ファイルでない場合は-1
になります。
document.getElementById("menu_images").onchange = function () {
var reader = new FileReader();
if(this.files[0].size>528385){
alert("Image Size should not be greater than 500Kb");
$("#menu_image").attr("src","blank");
$("#menu_image").hide();
$('#menu_images').wrap('<form>').closest('form').get(0).reset();
$('#menu_images').unwrap();
return false;
}
if(this.files[0].type.indexOf("image")==-1){
alert("Invalid Type");
$("#menu_image").attr("src","blank");
$("#menu_image").hide();
$('#menu_images').wrap('<form>').closest('form').get(0).reset();
$('#menu_images').unwrap();
return false;
}
reader.onload = function (e) {
// get loaded data and render thumbnail.
document.getElementById("menu_image").src = e.target.result;
$("#menu_image").show();
};
// read the image file as a data URL.
reader.readAsDataURL(this.files[0]);
};
これはサーバー側でのみ安全に行うことができます。 「accept」属性の使用は適切ですが、ユーザーがその制限なしにスクリプトにcURLできるように、サーバー側でも検証する必要があります。
画像ファイル以外のファイルを破棄し、ユーザーに警告し、フォームを再表示することをお勧めします。
最終的に、参照ウィンドウに表示されるフィルターはブラウザーによって設定されます。 Accept属性で必要なすべてのフィルターを指定できますが、ユーザーのブラウザーがそれに準拠するという保証はありません。
最善の策は、サーバーのバックエンドで何らかのフィルタリングを行うことです。
Uploadifyというプロジェクトをチェックアウトします。 http://www.uploadify.com/
Flash + jQueryベースのファイルアップローダーです。これには、Flashのファイル選択ダイアログが使用されます。このダイアログでは、ファイルタイプをフィルタリングしたり、複数のファイルを同時に選択したりすることができます。
<script>
function chng()
{
var typ=document.getElementById("fiile").value;
var res = typ.match(".jp");
if(res)
{
alert("sucess");
}
else
{
alert("Sorry only jpeg images are accepted");
document.getElementById("fiile").value="; //clear the uploaded file
}
}
</script>
Htmlパートで
<input type="file" onchange="chng()">
このコードは、アップロードされたファイルがjpgファイルであるかどうかを確認し、他のタイプのアップロードを制限します