2012-01-04 11 views
3

私はHTML形式を使用して画像ファイルをアップロードしています。今私は、ファイルの種類を許可するサーバー側の検証を使用しています。しかし、私はクライアント側でも検証したい。私はいくつかのウェブサイトで、ファイルを選択するときに他のファイルタイプが灰色になるのを見ました。私はそれがクールな選択肢だと思う。私はグーグルを歩いたとき、私はこのファイルアップロードの種類のみを制限する画像

<input id="my_file_element" type="file" name="file_0" accept="image/*"> 

を見つけましたが、私は取得していますこれで私も他のファイルを「すべてのファイル」オプションを有効にすることができTATなります。私はそれを必要としません。何が起こっても、ユーザーは自分のコンピュータから画像ファイルのみを選択することが許可されるべきです。あなたはこれを行う方法を知っていますか?

これは私がグレー表示で意味したものです。 enter image description here

+0

私はFirefoxで試してみましたが、そこには重大な影響があります。どのブラウザを使用していますか? –

+0

javascriptを使用して、ファイル形式の拡張子を確認することができます。私はあなたにいくつかのコードを与えるだろうが、私はジャバスクリプトで吸う。おそらくjQueryが好きかもしれません。 – Different55

+0

@dotweb:私はGoogle Chromeを使用しています。Firefoxでは「すべてのファイル」オプションを使用して他のファイルを選択できますか? – Deepak

答えて

3

このaccept属性はHTML5の機能であり、多くのブラウザでサポートされていません。

私が覚えている限り、より良いファイルアップロードダイアログ(ファイルタイプフィルタ、複数のファイルなど)を得る唯一の方法は、Flashオブジェクトを使用することです。

+0

私の編集をチェックできますか?私はそれがどのように見えるべきかのイメージをアップロードしました。私は彼らがここでフラッシュを使用していないと思うインターフェイスはMACからであり、フラッシュではありません。私は儀式ですか? – Deepak

0
Here is the HTML for image upload, By default it will show image files only in browsing window becauase we have put accept="image/*" . But still we can change it from the dropdown and it will show all files. So the Javascript part validates whether the selected file is an actual image or not. 

<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> 

Here on the change event first we are checking the size of the image. And in the second if condition we are checking whether it is an image file or not. 
this.files[0].type.indexOf("image") will be "-1" if it is not an image file. 

    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]); 
    }; 
+0

このコードは問題を解決するのに役立つかもしれませんが、 _why_および/または_how_に関する追加のコンテキストを提供すると、 はその質問に答えて、 長期値を大幅に改善します。あなたの答えを編集して の説明を追加してください。 –

関連する問題