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

ASP.限制文件上传可用的文件类型

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