В данный момент я получаю расширение файла файла как:
string fileExt = System.IO.Path.GetExtension(filUpload.FileName);
Но если пользователь изменяет расширение файла файла (например, пользователь мог бы переименовать "test.txt" к "test.jpg"), я не могу получить реальное расширение. Каково решение?
Кажется, вы спрашиваете, можете ли вы определить тип файла по его содержимому.
Большинство решений действительно будут пытаться использовать расширение файла, но существует слишком много различных возможных типов файлов, чтобы их можно было надежно идентифицировать.
Большинство подходов используют первые несколько байтов файла, чтобы определить, что они собой представляют.
Здесь - один список, , здесь - другой.
Если вас беспокоит только текст и двоичный файл, см. этот SO вопрос и ответы.
См. этот SO-ответ для проверки, является ли файл JPG - этот подход можно расширить, чтобы использовать другие заголовки файлов, как в первых двух ссылках в этом ответе.
Невозможно получить «настоящее» расширение файла - расширение файла, которое вы получаете из имени файла, является настоящим. Если вас беспокоит содержимое файла, вы можете получить тип содержимого с помощью свойства .ContentType и убедиться, что это именно тот тип содержимого, которого вы ожидаете, например. изображение / jpg .
Во что бы пользователь ни переименовал расширение файла, это и есть настоящее расширение файла.
Вы никогда не должны полагаться на расширение файла, чтобы узнать, что находится в файле, поскольку оно может быть переименовано.
См. "как мы можем проверить типы файлов перед их загрузкой в asp.net?"
.