2011-12-13 10 views
23

asp.netのWebサイトにファイルのアップロードを追加しました。ただし、ユーザーが選択できるファイルの種類を制限したい。たとえば、私はmp3ファイルを選択するユーザーのみです。ファイルアップロードにフィルタを追加すると、選択したフォルダ内のmp3ファイルのみが表示されます。ASP.NET - 使用可能なファイルの種類を制限する

<asp:FileUpload ID="FileUpload1" runat="server" /> 
<asp:Button ID="btnAudUpload" Text="Upload" CssClass="btncssUpload" OnClick="btnAudUpload_Click" runat="server" /> 
+1

あなたが投稿し参照することができますhttp://stackoverflow.com/questions/71944/i-valid-the-file-of-a-file-upload またはhttp://stackoverflow.com/questions/4234589/validation-of-file-extension-before -uploading-file ハッピーコーディング! – Ravia

答えて

4

デフォルトのファイルアップローダーのオプションはありませんが、Uploadifyなどのツールを使用してこの目標を達成できます。しかし、それが問題であれば、それはフラッシュベースです。 limited file types demoで試してみることができます。

フラッシュを使用したくない場合は、javascriptまたはサーバー側で検証を行うのが最も簡単で、ファイルのタイプが有効でない場合はユーザーに通知するのが最も簡単です。

file-input-accept-attribute-is-it-usefulは、いくつかの有用な情報があるかもしれない別の同様の質問です。

+3

私はなぜ私がdownvotedされたか知りたいです。あなたがそれが好きではないという理由だけで、それがフラッシュオプションのためだったなら、それは他人のための有効なオプションではないということを意味します。私はaskee、より多くの選択肢を選んでいるだけです。 –

+0

+1は 'accept'属性のために+1します。 – CedX

5

前述したように、それは箱の外にはできません。

私が見つけた簡単な解決策:ファイル拡張子を確認するには、RegularExpressionValidatorを使用します。 JavaScriptや外部ライブラリは不要です。もちろん、ファイルの内容ではなく拡張子をチェックするだけです(サーバー側のコードを使用してバイトを検査する必要があります)。フォルダブラウザに表示されるファイルリストには何も変更されません。

<asp:RegularExpressionValidator ControlToValidate="FileUpload1" ValidationExpression="^.*\.(mp3|MP3)$" runat="server" /> 
33

RegularExpressionValidatorを使用すると役立つことがあります。ファイル拡張子のチェックにサーバ側のコードは必要ありません。このコードをチェックしてください

<asp:RegularExpressionValidator ID="uplValidator" runat="server" ControlToValidate="FileUpload1" 
ErrorMessage=".mp3, .mp4 & wma formats are allowed" 
ValidationExpression="(.+\.([Mm][Pp][3])|.+\.([Mm][Pp][4])|.+\.([Ww][Mm][Aa]))"></asp:RegularExpressionValidator> 

あなたがしなければならないことは、FileUpload1というIDを持つファイルアップロードコントロールを追加することだけです。完了しました。あなたは、これは誰もが他の私はこれが私のために働いたことがわかった この質問を持っているがあれば、おそらく非常に古い話題です効果

+0

+1、すばらしい解決策。私はちょうど別の正規表現を使用したい場合にhttp://msdn.microsoft.com/en-us/library/ms972966.aspxを追加したいと思います。 – RdPC

+0

私が正しく理解していれば、これは利用可能なタイプを無効なファイルが選択されているときにアップロードを禁止するだけです。しかし、良いアイデア! – Ekus

+0

@Ekusそうです。 – Mubarek

4
<asp:RegularExpressionValidator ID="rexp" runat="server" ControlToValidate="fupProduct" 
    ErrorMessage="Only .gif, .jpg, .png, .tiff and .jpeg" 
    ValidationExpression="(.*\.([Gg][Ii][Ff])|.*\.([Jj][Pp][Gg])|.*\.([Bb][Mm][Pp])|.*\.([pP][nN][gG])|.*\.([tT][iI][iI][fF])$)"></asp:RegularExpressionValidator> 
0

をF5キーを押すと見ることができる

ASPので:するFileUploadはに変換し、 htmlタグをクライアントサイドに置くと、論理的にはhtmlタグを追加することができます。

は、それは今あなたが唯一のそれらのファイルtipesを選択することができますし、正規表現

17

使用はそれが本当にコントロールによってサポートされていない(タグに属性を直接を受け入れる必要はありませんが、私のために働いたが、意志クライアントに配信されます)

の場合、ファイル拡張子を「.xls、.xlsx」などとすると、これは推奨されず、一部のブラウザでは混乱することがあります。必要に応じて、

Upload MP3: <asp:FileUpload runat="server" accept=""audio/mpeg" /> 

使用カンマ区切りのリスト例:

Upload Excel files: <asp:FileUpload runat="server" 
       accept="application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" /> 

サポートされているブラウザを

それは、使用することをお勧めしますMIMEタイプ(ブラウザはあなたのために適切な拡張子にマッピングします)詳細情報:http://www.w3schools.com/tags/att_input_accept.asp

一般的なMIMEタイプ(のスナップショット10)

.au audio/basic 
.avi video/msvideo, video/avi, video/x-msvideo 
.bmp image/bmp 
.bz2 application/x-bzip2 
.css text/css 
.dtd application/xml-dtd 
.doc application/msword 
.docx application/vnd.openxmlformats-officedocument.wordprocessingml.document 
.dotx application/vnd.openxmlformats-officedocument.wordprocessingml.template 
.es application/ecmascript 
.exe application/octet-stream 
.gif image/gif 
.gz application/x-gzip 
.hqx application/mac-binhex40 
.html text/html 
.jar application/java-archive 
.jpg image/jpeg 
.js application/x-javascript 
.midi audio/x-midi 
.mp3 audio/mpeg 
.mpeg video/mpeg 
.ogg audio/vorbis, application/ogg 
.pdf application/pdf 
.pl application/x-perl 
.png image/png 
.potx application/vnd.openxmlformats-officedocument.presentationml.template 
.ppsx application/vnd.openxmlformats-officedocument.presentationml.slideshow 
.ppt application/vnd.ms-powerpointtd> 
.pptx application/vnd.openxmlformats-officedocument.presentationml.presentation 
.ps application/postscript 
.qt video/quicktime 
.ra audio/x-pn-realaudio, audio/vnd.rn-realaudio 
.ram audio/x-pn-realaudio, audio/vnd.rn-realaudio 
.rdf application/rdf, application/rdf+xml 
.rtf application/rtf 
.sgml text/sgml 
.sit application/x-stuffit 
.sldx application/vnd.openxmlformats-officedocument.presentationml.slide 
.svg image/svg+xml 
.swf application/x-shockwave-flash 
.tar.gz application/x-tar 
.tgz application/x-tar 
.tiff image/tiff 
.tsv text/tab-separated-values 
.txt text/plain 
.wav audio/wav, audio/x-wav 
.xlam application/vnd.ms-excel.addin.macroEnabled.12 
.xls application/vnd.ms-excel 
.xlsb application/vnd.ms-excel.sheet.binary.macroEnabled.12 
.xlsx application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 
.xltx application/vnd.openxmlformats-officedocument.spreadsheetml.template 
.xml application/xml 
.zip application/zip, application/x-compressed-zip 
+0

まだ「すべてのファイル」がドロップダウンにあります。 これを削除する方法はありますか? – Biswajeet

+1

@Biswajeet「すべてのファイル」を防ぐ方法や、ユーザーがファイル名として\ *。\ *を入力して、少なくとも一般的なデスクトップブラウザではすべてのファイルを表示しないようにする方法はないと思います。しかし、ファイルが選択された後、フィールドに検証を加える他の答えを見てください - http://stackoverflow.com/a/8492937/1754743 – Ekus

+0

私のためにトリックをしました...ありがとうEkus –

1

私は、PDFファイルのアップロードに使用されているのと同じアプリケーションを使用しています。アップロードコントロールにファイル形式のフィルタが用意されていれば素晴らしいかもしれませんが、アップロードするファイルタイプを制限するという問題を実際には解決できないことがわかりました。

たとえば、ユーザーがWord文書の名前を "myfile.docx"から "myfile.pdf"に変更するだけの場合、実際のファイルエンコーディングが無効であってもシステムは有効なファイルであるとみなします。これにより、アプリケーションの他の部分で問題が発生します。

実際に問題を解決するには、コントロールからバイト配列を取り出し、文字列として解析することができます。次にフィルタを適用します。もちろん

private static void CheckForValidFileType(byte[] data) 
    { 
     var text = ASCIIEncoding.ASCII.GetString(data); 
     if (!text.StartsWith("%PDF")) 
      throw new Exception("Invalid file type selected."); 
    } 

あなたはファイルタイプに対して有効であるかのパターンを知っておく必要がありますし、代わりにネット文字列ヘルパーメソッドの正規表現を使用したい場合がありますが、一般的な考え方:ここで私が持っているコードです。実際のファイルの内容を実際に確認し、検証のためにファイル拡張子に依存しないことです。

ライアンA.

1

問題ありません。ここにあります!

<asp:FileUpload ID="FileUpload1" runat="server" accept=".mp3"/> 
0

次のコードjsコードを使用して、選択する必要のあるファイルタイプのみを選択します。私は唯一のzipファイルを選択したい以下の例では は、それが唯一のzipファイルの拡張子のファイル名

(function ($) { 
 
      $.fn.acceptFileType = function (types) { 
 
       if (types == undefined) { 
 
        return true; 
 
       } else { 
 
        types = types.split(",") 
 
       } 
 
       this.each(function() { 
 
        $(this).bind("change", function() { 
 
         if (!$.inArray($(this).val().replace(/([\d\w.]+)(\.[a-z0-9]+)/i, '\2'), types)) { 
 
          $(this).val(''); 
 
          return false; 
 
         } 
 
         return true; 
 
        }); 
 
       }); 
 
      }; 
 
     })(jQuery); 
 
     $(":file").acceptFileType(".zip"); 
 
     
 
     
 
     
 
     <input type="file" id="txtFileUploadGrid" runat="server" accept=".zip,application/octet-stream,application/zip,application/x-zip,application/x-zip-compressed" /> 
 
     
 
     
 
     
 
    
を示しているの閲覧には

関連する問題