ASP.限制文件上传可用的文件类型
本文关键字:文件 类型 ASP | 更新日期: 2023-09-27 18:17:56
我已经添加了一个文件上传到我的asp.net网站。但是,我想限制用户可以选择的文件类型。例如,我只允许用户选择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>
记住你现在要做的就是添加一个id为FileUpload1的文件加载控件。完成了。你可以按F5,看到
直接在标签中使用accept属性(控件并不真正支持,但无论如何都会传递给客户端)
虽然可以列出文件扩展名,例如:".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" />
默认文件上传器没有选项,但是您可以使用Uploadify等工具来实现此目标。然而,如果这是一个问题,它是基于flash的。你可以在他们有限的文件类型演示中尝试一下。
如果你不想使用flash,最简单的方法是自己通过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中使用FileUpload控件是不可能的。. NET,但是下面的链接可能会有所帮助:
http://forums.asp.net/p/1136820/1817938.aspx没有问题。在这里!
<asp:FileUpload ID="FileUpload1" runat="server" accept=".mp3"/>
我有一个类似的用于上传PDF文件的应用程序。如果Upload Control自带一个文件类型过滤器,那就太好了,但是我发现这并不能真正解决限制文件类型的问题。
例如,如果用户简单地将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.");
}
当然,您需要知道什么模式对您的文件类型有效,并且可能希望使用RegEx而不是. net字符串辅助方法,但一般的想法是实际检查实际的文件内容,而不是依赖于文件扩展名进行验证。
瑞安·a .
这可能是一个非常古老的话题,但是如果其他人有这个问题我发现这对我很有效
因为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" />