Как ограничить типы файлов с помощью типа входного файла HTML?

Как ограничить типы файлов с помощью типа входного файла HTML?

У меня есть это

<input type="file" id="fileUpload" name="fileUpload" size="23" accept="Calendar/ics"/>

Я пытаюсь ограничить тип только типом формата iCalendar.

Я также хочу проверить его на стороне сервера. Как это сделать в ASP.NET MVC?

Ответы

Ответ 1

К сожалению, вы не можете ограничить расширение файла, как вы можете, в стандартном диалоговом окне браузера файлов. Тем не менее, вы можете проверить расширение, как только пользователь выберет файл.

Вы можете добавить этот обработчик событий.

filebox.Attributes.Add("onchange", "fileSelectedChanged(this);");

и эта функция JavaScript

function fileSelectedChanged(obj) {
    var filePath = obj.value;

    var ext = filePath.substring(filePath.lastIndexOf('.') + 1).toLowerCase();
    if(ext != 'csv') {
        alert('Only files with the file extension CSV are allowed');
    } else {
        document.getElementById('form1').submit();
    }
}

Вы также должны проверить его на сервере, используя:

filebox.PostedFile.FileName

и

filebox.PostedFile.ContentType

Ответ 2

текст/календарь - правильный тип mime

<input type="file" id="fileUpload" name="fileUpload" size="23" accept="text/calendar" />

Ответ 3

Вы не можете указать, какие файлы пользователь может выбрать. Вы можете использовать Javascript для предотвращения отправки пользователем формы, но это недостаточно. Javascript можно легко отключить в браузере. Вам нужна логика на стороне сервера, которая оценивает тип содержимого загрузки (даже просто проверка расширения файла действительно недостаточно)...

HttpPostedFile file = Request.Files(0);

if(file.ContentType != "text/calendar")
{
    //Error
}

Ответ 4

instaed accept вы должны использовать атрибут атрибута contetypes, чтобы существовал одиночный "t", в contentypes

и в коде сервера проверьте, что это

Файл HttpPostedFileBase = Request.Files [0];

если (! File.ContentType.startsWith( "текст/календарь" )) {   // Ошибка }

надеюсь, что это пройдёт вашу проблему. Отметьте мой ответ, если он будет.

Ответ 5

Я лично предпочитаю что-то вроде Uploadify, который позволяет вам это делать, а также предоставляет фантастический индикатор прогресса... Я не знаю, t знаю, если это слишком "тяжелый вес" для вас, хотя.