2011-12-13 129 views
23

我添加了一个文件上传到我的asp.net网站。但是,我想限制用户可以选择的文件类型。例如,我只有用户选择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/how-do-i-validate-the-file-type-of-file-upload 或http://stackoverflow.com/questions/4234589/validation-of-file-extension-before上传文件 快乐编码! – Ravia

回答

4

默认文件上传器没有选项,但可以使用诸如Uploadify之类的工具来实现此目标。但是,如果这是一个问题,它是基于闪存的。你可以试试limited file types demo

如果您不想使用闪存,最简单的方法是通过javascript或服务器端自己进行验证,并通知用户文件的类型是否无效。

file-input-accept-attribute-is-it-useful是另一个类似的问题,可能有一些有用的信息。

+3

我很想知道我为什么被低估。如果这是因为闪光灯的选择,只是因为你不喜欢它并不意味着它不是其他人的有效选择。我只是提供更多的选择。 –

+0

+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的文件上传控件。完成。您可以按F5键并看到效果

+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

这可能是一个非常古老的话题,但是,如果任何人有这个问题 我发现,这个工作对我来说

因为ASP:文件上传转换为在客户端的HTML标签,它逻辑上使你可以添加html标签。

它的工作对我来说,现在你只能选择那些文件tipes,不需要正则表达式

17

使用接受直接在标签属性(它没有真正的控制支持,但会无论如何都要交付给客户端)

虽然你可能列表文件扩展名,例如:“.xls,.xlsx”,这是不推荐的,有些浏览器会被它弄糊涂。如果需要的话

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

用逗号分隔的列表,如:

这是更好地使用MIME类型(浏览器将它们映射为你适当的扩展)

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 
+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."); 
    } 

当然,你需要知道哪些模式是有效的为您的文件类型,可能需要使用正则表达式,而不是净串助手方法的,但一般的概念实际上是检查实际的文件内容,而不是依赖文件扩展名进行验证。

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

相关问题