В моем веб-приложении (asp.net, С#) я загружаю видеофайл на странице, но хочу загрузить только FLV-видео. Как я могу ограничить загрузку других видеороликов для расширения?
Как найти расширение файла?
Ответ 1
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
Нашел альтернативное решение в 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);
}