7

私はファイルをアップロードするためにフォームを使用しています。 PDFファイルのみをアップロードします。ファイルアップロードの検証 - Jqueryと "Accept"属性

@Html.FileBox(m => m.FileName, new { id = "FileName", accept = "application/pdf" }) 

と、エラー・メッセージ(複数可)を表示する場所:のために生成さ

@Html.ValidationMessageFor(m=>m.FileName) 

コードを

入力ボックスは、ユーザーがファイルを選択できるようにする:これは私のコードです入力フィールドには、次のとおりです。

<input id="FileName" type="file" name="FileName" data-val-required="The File Name field is required." data-val-length-max="512" data-val-length="The field File Name must be a string with a maximum length of 512." data-val="true" accept="application/pdf"> 

は、今私はPDFファイルを選択した場合でも、私はエラーを取得する Please enter a value with a valid extension.

私はMVC 3と邪魔にならないjqueryを使ってフォームを検証しています。

+0

これをあなたが考え出しましたか?私は同じ問題を抱えています。私は、私の場合、複数のタイプ( "image/gif、image/png、image/jpeg")を受け入れる必要があります。 –

+0

いいえ私はしていません。私は "受け入れ"属性を削除する必要がありました。 Jqueryの検証では、「受け入れる」のMIMEタイプの検証をサポートしていない可能性があります。 – escist

+0

@ThiagoSilva画像タイプについては問題ではありません。 'accept =" image/gif、image/jpeg "'のようなものを試しましたか? – escist

答えて

7

jQuery検証に組み込まれている "accept"ルールメソッドは、 "jpg | png"に似た形式で値を受け取ります。

"accept" HTML属性は、 "image/jpeg、image/png"に似た形式をとります。

jQuery検証とHTML標準はこの点で互換性がないようです。

ここでは、jQuery Validation's "accept" ruleHTML5 "accept" attributeについて詳しく読むことができます。あなたの属性を受け入れるように両方のフォーマットを置く場合

+1

バージョン1.10.0では、 "accept"メソッドの動作が変更されました。詳細は私の答えをチェックしてください。 –

10

私は同じ問題があり、accept属性の検証を完全に無効にする必要がありました。私は私のページに次の行を追加しました:

$ .validator.addMethod( 'accept'、function(){return true;});

+0

私はacceptメソッドを検証する必要があります。 – escist

+0

ありがとう!それが私の必要なすべてです。私は、ファイルをフィルタリングすることに興味がありました= pdfファイルのためのダイアログを開きます。私は、サーバー側でファイルを検証するつもりです。 – jkokorian

+1

それはうまくいった!ありがとう! - 必要に応じて、アイテムを検証するために提供された無名関数を使用してください。 –

5

それは

accept="image/jpeg,image/png,jpg|png" 
7

動作するはずです彼らはバージョン1.10.0で「受け入れる」メソッドの動作を変更しました。ファイル拡張子をチェックする代わりに、MIMEタイプを調べます。古い振る舞いが "拡張"メソッドとして利用可能になりました。したがって、jqueryの検証プラグインのバージョンを更新するだけで完了です。現在のバージョン1.9.0を1.11.0に置き換え、有効なMIMEタイプをaccept-attributとして設定しました。現在、期待どおりに動作しています:

accept="image/*, application/pdf" 
関連する問題