ASP.NET - Ограничить загрузку файлов доступными типами файлов - PullRequest
23 голосов
/ 13 декабря 2011

Я добавил файл на мой сайт asp.net. Однако я хочу ограничить типы файлов, которые пользователь может выбрать. Например, я только пользователь, чтобы выбрать mp3 файлы. Как добавить фильтр к загрузке файла, чтобы в выбранной папке отображались только mp3-файлы?

 <asp:FileUpload ID="FileUpload1" runat="server" />
 <asp:Button ID="btnAudUpload" Text="Upload" CssClass="btncssUpload" OnClick="btnAudUpload_Click" runat="server" />

Ответы [ 10 ]

33 голосов
/ 13 декабря 2011

Использование 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 и увидеть эффект

22 голосов
/ 22 апреля 2015

Используйте атрибут 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
5 голосов
/ 13 декабря 2011

Как указано выше, это невозможно из коробки.

Более простое решение, которое я нашел: используйте RegularExpressionValidator, чтобы проверить расширение файла.Нет необходимости в JavaScript или внешних библиотеках.Конечно, он только проверяет расширение, а не содержимое файла (вы должны использовать серверный код и проверять байты), и ничего не меняет в списке файлов, отображаемом в браузере папок.

<asp:RegularExpressionValidator ControlToValidate="FileUpload1" ValidationExpression="^.*\.(mp3|MP3)$" runat="server" />
4 голосов
/ 25 ноября 2013
<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>
4 голосов
/ 13 декабря 2011

Для загрузчика файлов по умолчанию нет параметров, но вы можете использовать такие инструменты, как Uploadify для достижения этой цели.Тем не менее, это флэш-основе, если это проблема.Вы можете попробовать его на их ограниченных типах файлов demo .

Если вы не хотите использовать flash, было бы проще всего выполнить проверку самостоятельно через javascript или на стороне сервера исообщите пользователю, если тип файла недействителен.

file-input-accept-attribute-is-it-полезно - это еще один аналогичный вопрос, который может содержать некоторую полезную информацию.

3 голосов
/ 13 декабря 2011

Это невозможно с элементом управления FileUpload в ASP.NET, но может помочь следующая ссылка:

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

1 голос
/ 10 ноября 2016

Нет проблем.Вот оно!

<asp:FileUpload ID="FileUpload1" runat="server" accept=".mp3"/>
1 голос
/ 18 июля 2016

У меня есть похожее приложение, которое используется для загрузки файлов 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.");
}

Конечно, вам нужно будет знать, какие шаблоны допустимы для вашего типа файла, и вы можете использовать RegEx вместо метода .Net string helper, ноОбщая идея состоит в том, чтобы фактически проверить фактическое содержимое файла и не полагаться на расширение файла для проверки.

Райан А.

0 голосов
/ 02 августа 2017

Используйте следующий код js code для того, чтобы выбрать только тот тип файла, который мы хотим выбрать.В приведенном ниже примере я хочу выбрать только 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" />
        
        
        
        
0 голосов
/ 06 декабря 2013

Это, вероятно, очень старая тема, однако, если у кого-то еще есть этот вопрос Я обнаружил, что это работает для меня

, поскольку asp: FileUpload преобразуется в html-тег на стороне клиента, логично убедиться, что вы также можете добавить html-теги.

Это сработало для меня, теперь вы можете выбрать только те подсказки файлов и не нуждаетесь в регулярных выражениях

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...