HTML:ファイルのアップロードを画像のみに制限するにはどうすればよいですか?


126

HTMLで、アップロードできるファイルの種類を制限するにはどうすればよいですか?

ユーザーエクスペリエンスを簡単にするために、ファイルのアップロードを画像(jpeg、gif、png)のみに制限します。

<form method="post" action="..." enctype="multipart/form-data">
<label for="image">Photo</label>
<input name="image" type="file" />
</form>

明らかに、これを適切に保護するには、バックエンド/サーバー側で確認します。しかし、私が探しているのは、ユーザーエクスペリエンスを単純にして、「参照」をクリックしてアップロードしたい画像を見つけたときに、該当するWordドキュメントなどをすべて表示する必要がないようにすることだけです。アップロード
JacobT 2009年

ファイルマスクを設定できるかわかりません。私はそれが成功するのを見たことがありません。
ロバートK

回答:


230

HTML5は言う<input type="file" accept="image/*">。もちろん、クライアント側の検証は絶対に信頼しないでください。常にサーバー側で再度確認してください...


87

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

上記のコードにより、アップロードするファイルタイプのユーザーを制限することもできます。


4
image/*|audio/*|video/*私のために動作しません、それはカンマ区切りでなければなりませんそれはそうです:image/*,video/mp4,.txt
serg

mimeTypeのチェックに最適です。Tx!
ペドロフェレイラ

6

編集済み

本来の状態である場合は、「Accept」属性を使用してこれを行うことができます。

http://www.webmasterworld.com/forum21/6310.htm

ただし、ブラウザはこれをほとんど無視するため、これは無関係です。簡単に言えば、HTMLでそれを行う方法はないと思います。代わりにサーバー側で確認する必要があります。

次の古い投稿には、別の方法で役立つ情報がいくつかあります。

ファイル入力の 'accept'属性-役に立ちますか?


6

画像アップロード用の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]);
};

説明を追加してください。
Paul Swetz、2016年

上記ではjqueryが必要ですが、そうではないことに注意してください。理解するのに十分簡単ですが、述べるのに役立ちます。このためのフィドルを作成しまし。(プロジェクトに必要な)他のいくつかのことを行いますが、概念はほとんど同じです。
Dave Land

1

これはサーバー側でのみ安全に実行できます。「accept」属性の使用は適切ですが、ユーザーがその制限なしにスクリプトにcURLできるようにするには、サーバー側でも検証する必要があります。

非画像ファイルを破棄し、ユーザーに警告して、フォームを再表示することをお勧めします。


1
<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ファイルかどうかをチェックし、他のタイプのアップロードを制限します


このチェックは、ファイル拡張子の名前を変更するだけで無効になります。このようなことを行う場合は、少なくともデータURIタイプを確認する必要があります。
Lucas Leblanc 2018年

0

最終的に、「参照」ウィンドウに表示されるフィルターは、ブラウザーによって設定されます。必要なすべてのフィルターをAccept属性で指定できますが、ユーザーのブラウザーがそれを遵守する保証はありません。

あなたの最善の策は、サーバーのバックエンドである種のフィルタリングを行うことです。


0

Uploadifyというプロジェクトをチェックアウトします。http://www.uploadify.com/

これは、Flash + jQueryベースのファイルアップローダーです。これは、Flashのファイル選択ダイアログを使用して、ファイルタイプのフィルタリング、複数のファイルの同時選択などを行うことができます。


30
フラッシュ?
ErickBest

14
史上最悪のソリューション。
Matteo Mosconi

1
みんな、なぜこれが最悪の解決策なのかわかりません。確かにFlashは消えるでしょうが、それでも古いブラウザーで使用されています-非常に古く、大丈夫ですが、まだ使用されています-このソリューションには、jQuery + HTML5とFlashフォールバックの両方のタイプのテクノロジーがあります。ブラウザがビデオを再生できない場合に備えてFlashフォールバックを備えたVideoJSと同じくらい優れています...私はソリューションをテストしていませんが、最善ではないかもしれませんが、反対票は公平ではありません。
ウナペドラ2014年

1
+1ばかげて投票する。Flashは廃止されますが、フォールバックは良好です。GoogleはソケットフォールバックのGmailに何を使用していると思いますか?ばか。
Jason Sebring、

8
この答えは4歳です。現時点では、HTML5での複数ファイルの選択や、ファイルの選択ウィンドウを許可されたタイプでフィルタリングすることは、主要なブラウザでは十分にサポートされていませんでした。これは、当時は多くの場合に機能していたソリューションでしたが、今は純粋なHTML5ソリューションに移行します。
AndrewR 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.