У своїй веб-програмі (asp.net, c #) я завантажую відеофайл на сторінку, але хочу завантажувати лише файли flv. Як я можу обмежитись, коли завантажую інші відео з розширеннями?
У своїй веб-програмі (asp.net, c #) я завантажую відеофайл на сторінку, але хочу завантажувати лише файли flv. Як я можу обмежитись, коли завантажую інші відео з розширеннями?
Відповіді:
string myFilePath = @"C:\MyFile.txt";
string ext = Path.GetExtension(myFilePath);
// ext would be ".txt"
Ви можете просто прочитати потік файлу
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")
На сервері ви можете перевірити тип MIME, шукати тип mime типу flv тут або в google.
Ви повинні перевірити, чи є тип mime
video/x-flv
Якщо ви, наприклад, використовували FileUpload в C #, ви можете це зробити
FileUpload.PostedFile.ContentType == "video/x-flv"
Ви не зможете обмежити тип файлу, який користувач завантажує на стороні клієнта [*]. Ви зможете зробити це лише на стороні сервера. Якщо користувач завантажує неправильний файл, ви зможете розпізнати це лише після завантаження файлу, завантаженого. Немає надійного та безпечного способу зупинити завантаження користувачем будь-якого формату файлу.
[*] так, ви можете робити всілякі розумні речі, щоб виявити розширення файлу перед початком завантаження, але не покладайтеся на нього. Хтось обійде його і рано чи пізно завантажить все, що їм подобається.
Ви можете перевірити .flv підпис. Ви можете завантажити специфікацію тут:
http://www.adobe.com/devnet/flv/
Див. "Заголовок FLV".
Знайдено альтернативне рішення в 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);
}
string FileExtn = System.IO.Path.GetExtension(fpdDocument.PostedFile.FileName);
Вищеописаний метод добре працює з firefox та IE, я можу переглядати всі типи файлів, такі як zip, txt, xls, xlsx, doc, docx, jpg, png
але коли я намагаюся знайти розширення файлу з googlechrome, я не вдався.
Варто згадати, як видалити розширення також паралельно з отриманням розширення:
var name = Path.GetFileNameWithoutExtension(fileFullName); // Get the name only
var extension = Path.GetExtension(fileFullName); // Get the extension only