Как я ограничиваю типы файлов с типом файла ввода HTML?
У меня есть это
Я пытаюсь ограничить тип только iCalendar типом формата.
Я также хочу проверить его на стороне сервера. Как я делаю это в ASP.NET MVC?
К сожалению, вы не можете ограничить расширение файла так, как это можно сделать в стандартном диалоге файлового браузера. Однако, вы можете проверить расширение, как только пользователь выберет файл.
Вы можете добавить обработчик этого события.
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
Невозможно указать, какие файлы пользователь может выбрать. Вы можете использовать Javascript, чтобы помешать пользователю отправить форму, но этого недостаточно. Javascript можно легко отключить в браузере. Вам нужна логика на стороне сервера, которая оценивает тип контента при загрузке (даже просто проверить расширение файла на самом деле недостаточно хорошо)...
HttpPostedFile file = Request.Files(0);
if(file.ContentType != "text/calendar")
{
//Error
}
при условии акцепта следует использовать атрибут contetypes, заметив, что есть одна "t". в соотношениях
и в коде сервера проверьте вот так
HttpPostedFileBase file = Request.Files[0];
if(!file.ContentType.beginWith("text/calendar")) { /Ошибка }
надеюсь, что это выдержит вашу проблему. Пометьте мой ответ, если это так.
text/calendar is the right mime type
<input type="file" id="fileUpload" name="fileUpload" size="23" accept="text/calendar" />
Лично я предпочитаю что-то вроде Загрузить , что позволяет это сделать, а также обеспечивает причудливую прогрессирующую шкалу... Не знаю, не слишком ли это "тяжело" для вас.