Как найти расширение файла?

В моем веб-приложении (asp.net, С#) я загружаю видеофайл на странице, но хочу загрузить только FLV-видео. Как я могу ограничить загрузку других видеороликов для расширения?

Ответ 1

Path.GetExtension

string myFilePath = @"C:\MyFile.txt";
string ext = Path.GetExtension(myFilePath);
// ext would be ".txt"

Ответ 2

Вы можете просто прочитать поток файла

using (var target = new MemoryStream())
{
    postedFile.InputStream.CopyTo(target);
    var array = target.ToArray();
}

Первые 5/6 индексов сообщат вам тип файла. В случае FLV его 70, 76, 86, 1, 5.

private static readonly byte[] FLV = { 70, 76, 86, 1, 5};

bool isAllowed = array.Take(5).SequenceEqual(FLV);

если isAllowed равно true тогда его FLV.

ИЛИ ЖЕ

Прочитать содержимое файла

var contentArray = target.GetBuffer();
var content = Encoding.ASCII.GetString(contentArray);

Первые две/три буквы сообщат вам тип файла.
В случае FLV его "FLV......"

content.StartsWith("FLV")

Ответ 3

На сервере вы можете проверить тип MIME, тип flv-типа lookup здесь или в google.

Вы должны проверить, что тип mime

video/x-flv

Если вы использовали FileUpload в С#, например, вы могли бы сделать

FileUpload.PostedFile.ContentType == "video/x-flv"

Ответ 4

Я не уверен, что это то, что вы хотите, но:

Directory.GetFiles(@"c:\mydir", "*.flv");

Или:

Path.GetExtension(@"c:\test.flv")

Ответ 5

Кроме того, если у вас есть FileInfo fi, вы можете просто сделать:

string ext = fi.Extension;

и он будет содержать расширение файла (примечание: оно будет содержать ., поэтому результат выше может быть: .jpg .txt и т.д....

Ответ 6

Вы не сможете ограничить тип файла, который пользователь загружает на стороне клиента [*]. Вы сможете сделать это только на стороне сервера. Если пользователь загружает неправильный файл, вы сможете узнать, как только он будет загружен. Нет надежного и безопасного способа остановить загрузку пользователем любого формата файла, который им нужен.

[*] да, вы можете делать всевозможные умные вещи, чтобы обнаружить расширение файла перед началом загрузки, но не полагайтесь на него. Кто-то обойдет его и загрузит все, что захочет, рано или поздно.

Ответ 7

string FileExtn = System.IO.Path.GetExtension(fpdDocument.PostedFile.FileName);

Вышеуказанный метод отлично работает с Firefox и IE, я могу просматривать все типы файлов, такие как zip, txt, xls, xlsx, doc, docx, jpg, png

но когда я пытаюсь найти расширение файла от googlechrome, у меня не получается.

Ответ 8

Стоит упомянуть, как удалить расширение также параллельно с получением расширения:

var name = Path.GetFileNameWithoutExtension(fileFullName); // Get the name only

var extension = Path.GetExtension(fileFullName); // Get the extension only

Ответ 9

Вы можете проверить подпись .flv. Вы можете скачать спецификацию здесь:

http://www.adobe.com/devnet/flv/

См. главу "Заголовок FLV".

Ответ 10

Это решение также помогает в случаях более чем одного расширения, такого как "Avishay.student.DB"

                FileInfo FileInf = new FileInfo(filePath);
                string strExtention = FileInf.Name.Replace(System.IO.Path.GetFileNameWithoutExtension(FileInf.Name), "");

Ответ 11

EndsWith()

Нашел альтернативное решение в DotNetPerls, которое мне понравилось, потому что оно не требует указания пути. Вот пример, когда я заполнил массив с помощью настраиваемого метода

        // This custom method takes a path 
        // and adds all files and folder names to the 'files' array
        string[] files = Utilities.FileList("C:\", "");
        // Then for each array item...
        foreach (string f in files)
        {
            // Here is the important line I used to ommit .DLL files:
            if (!f.EndsWith(".dll", StringComparison.Ordinal))
                // then populated a listBox with the array contents
                myListBox.Items.Add(f);
        }