Asp.net Webサイトにファイルアップロードを追加しました。ただし、ユーザーが選択できるファイルの種類を制限したいと思います。たとえば、私はユーザーだけがmp3ファイルを選択します。選択したフォルダー内のmp3ファイルのみを表示するように、ファイルアップロードにフィルターを追加するにはどうすればよいですか?
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="btnAudUpload" Text="Upload" CssClass="btncssUpload" OnClick="btnAudUpload_Click" runat="server" />
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を押して、効果を確認できます
タグで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
上記のように、すぐに使用することはできません。
私が見つけたより簡単なソリューション:RegularExpressionValidatorを使用してファイル拡張子を確認します。 JavaScriptや外部ライブラリは必要ありません。もちろん、ファイルの内容ではなく拡張子のみをチェックし(サーバー側のコードを使用してバイトを検査する必要があります)、フォルダーブラウザーに表示されるファイルリストには何も変更しません。
<asp:RegularExpressionValidator ControlToValidate="FileUpload1" ValidationExpression="^.*\.(mp3|MP3)$" runat="server" />
デフォルトのファイルアップローダーにはオプションはありませんが、 ploadify などのツールを使用してこの目標を達成できます。ただし、それが問題の場合はフラッシュベースです。 制限されたファイルタイプのデモ で試してみることができます。
フラッシュを使用したくない場合は、JavaScriptを使用するかサーバー側で検証を行い、ファイルの種類が有効でない場合はユーザーに通知するのが最も簡単です。
file-input-accept-attribute-is-it-useful は、いくつかの有用な情報があるかもしれない別の同様の質問です。
<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>
ASP.NETのFileUploadコントロールでは不可能ですが、次のリンクが役立つ場合があります。
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.
問題はない。ここにあります!
<asp:FileUpload ID="FileUpload1" runat="server" accept=".mp3"/>
これはおそらく非常に古いトピックですが、他の誰かがこの質問を持っている場合、私はこれが私のために働いたことを見つけました
asp:FileUploadはクライアント側でhtmlタグに変換するため、論理的にはhtmlタグを追加することもできます。
それは私のために働いた、今あなたはそれらのファイルのヒントのみを選択することができ、正規表現を必要としない
次のコード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" />