Подтвердить что ты не робот

ASP.NET - доступ к файлам с ограниченным доступом к файлам

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

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

Ответ 1

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

Ответ 2

Используйте атрибут Принять непосредственно в теге (он не поддерживается системой, но все равно будет доставлен клиенту)

Пока вы можете перечислить расширения файлов, например:.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

Ответ 3

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

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

<asp:RegularExpressionValidator ControlToValidate="FileUpload1" ValidationExpression="^.*\.(mp3|MP3)$" runat="server" />

Ответ 4

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

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

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

Ответ 5

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

Ответ 7

У меня есть аналогичное приложение, которое используется для загрузки файлов 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-хелпера, но общая идея состоит в том, чтобы фактически проверить фактическое содержимое файла и не полагаться на расширение файла для проверки.

Райан А.

Ответ 8

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

<asp:FileUpload ID="FileUpload1" runat="server" accept=".mp3"/>

Ответ 9

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

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

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

Ответ 10

Используйте следующий код 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" />