ASP.NET – 限制文件上载可用的文件类型

我已将文件上传添加到我的asp.net网站。 但是,我想限制用户可以选择的文件类型。 例如,我只有用户选择mp3文件。 如何在文件上传中添加filter,以便仅显示所选文件夹中的mp3文件?

  

使用RegularExpressionValidator可以帮助您。 检查文件扩展名不需要服务器端代码。 看看这段代码

  

记住,您现在需要做的就是添加一个id为FileUpload1的fileupload控件。 完成。 您可以按F5查看效果

直接在标记中使用accept属性(控件不支持它,但无论如何都会传递给客户端)

虽然你可以列出文件扩展名,例如:“。xls,.xlsx”,但不建议这样做,有些浏览器会对它感到困惑。

最好使用MIME类型 (浏览器会将它们映射到适当的扩展名):

  Upload MP3:  

如果需要,请使用以逗号分隔的列表,例如:

  Upload Excel files:  

支持的浏览器和更多信息: http : //www.w3schools.com/tags/att_input_accept.asp

下面的常见MIME类型( http://sofzh.miximages.com/c%23/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或外部库。 当然,它只检查扩展名,而不是文件内容(必须使用服务器端代码并​​检查字节),并且不会更改文件夹浏览器中显示的文件列表。

  

默认文件上传器没有选项,但您可以使用上传等工具来实现此目标。 但是,如果这是一个问题,它是基于闪存。 您可以在他们有限的文件类型演示中试用它 。

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

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

  

使用ASP.NET中的FileUpload控件是不可能的,但以下链接可能会有所帮助:

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

我有一个类似的应用程序,用于上传PDF文件。 虽然如果上传控件有一个开箱即用的文件类型filter会很棒,但我发现它不会真正解决限制文件类型上传的问题。

例如,如果用户只是将Word文档从“myfile.docx”重命名为“myfile.pdf”,则系统会认为它是有效文件,即使实际文件编码无效; 这会导致应用程序的其他部分出现问题。

要实际解决问题,可以从控件中获取字节数组并将其解析为字符串。 然后应用filter。 这是我的代码:

  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字符串帮助方法,但一般的想法是实际检查实际文件内容而不依赖于文件validation的扩展。

瑞安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");