web-dev-qa-db-ja.com

ASP.NET-ファイルアップロード可能なファイルタイプを制限する

Asp.net Webサイトにファイルアップロードを追加しました。ただし、ユーザーが選択できるファイルの種類を制限したいと思います。たとえば、私はユーザーだけがmp3ファイルを選択します。選択したフォルダー内のmp3ファイルのみを表示するように、ファイルアップロードにフィルターを追加するにはどうすればよいですか?

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

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を持つfileuploadコントロールを追加することだけです。できたF5を押して、効果を確認できます

33
Mubarek

タグでaccept属性を直接使用します(実際にはコントロールでサポートされていませんが、いずれにしてもクライアントに配信されます)

couldファイル拡張子をリストします(例: ".xls、.xlsx")。これは推奨されておらず、一部のブラウザーは混乱します。

MIMEタイプを使用することをお勧めします(ブラウザはそれらを適切な拡張子にマッピングします):

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

サポートされているブラウザと詳細: http://www.w3schools.com/tags/att_input_accept.asp

以下の一般的なMIMEタイプ( http://www.sitepoint.com/web-foundations/mime-types-summary-list/ のスナップショット)

.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
22
Ekus

上記のように、すぐに使用することはできません。

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

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

デフォルトのファイルアップローダーにはオプションはありませんが、 ploadify などのツールを使用してこの目標を達成できます。ただし、それが問題の場合はフラッシュベースです。 制限されたファイルタイプのデモ で試してみることができます。

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

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

4
Josh Mein
<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>
4
saau

ASP.NETのFileUploadコントロールでは不可能ですが、次のリンクが役立つ場合があります。

http://forums.asp.net/p/1136820/1817938.aspx

3
Kev Ritchie

PDFファイルをアップロードするために使用されている同様のアプリケーションがあります。UploadControlにファイルタイプフィルターがすぐに使える場合は素晴らしいと思いますが、実際には解決しませんアップロードするファイルの種類を制限する問題。

たとえば、ユーザーが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.");
}

もちろん、ファイルタイプに有効なパターンを知る必要があり、.Net文字列ヘルパーメソッドの代わりにRegExを使用したい場合がありますが、一般的なアイデアは実際のファイルの内容を実際にチェックし、ファイルに依存しないことです検証のための拡張。

ライアン・A.

1
Ryan Anderson

問題はない。ここにあります!

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

これはおそらく非常に古いトピックですが、他の誰かがこの質問を持っている場合、私はこれが私のために働いたことを見つけました

asp:FileUploadはクライアント側でhtmlタグに変換するため、論理的にはhtmlタグを追加することもできます。

それは私のために働いた、今あなたはそれらのファイルのヒントのみを選択することができ、正規表現を必要としない

0
Donald Jansen

次のコード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" />
        
        
        
        
0
Mukul