En mi aplicación web (asp.net, c #) estoy cargando un archivo de video en una página pero quiero cargar solo videos flv. ¿Cómo puedo restringir cuando subo otros videos de extensión?
En mi aplicación web (asp.net, c #) estoy cargando un archivo de video en una página pero quiero cargar solo videos flv. ¿Cómo puedo restringir cuando subo otros videos de extensión?
Respuestas:
string myFilePath = @"C:\MyFile.txt";
string ext = Path.GetExtension(myFilePath);
// ext would be ".txt"
Simplemente puede leer la secuencia de un archivo
using (var target = new MemoryStream())
{
postedFile.InputStream.CopyTo(target);
var array = target.ToArray();
}
Los primeros índices de 5/6 le indicarán el tipo de archivo. En caso de FLV es 70, 76, 86, 1, 5 .
private static readonly byte[] FLV = { 70, 76, 86, 1, 5};
bool isAllowed = array.Take(5).SequenceEqual(FLV);
si isAllowed
es igual que true
su FLV.
O
Leer el contenido de un archivo
var contentArray = target.GetBuffer();
var content = Encoding.ASCII.GetString(contentArray);
Las primeras dos / tres letras le indicarán el tipo de archivo.
En caso de FLV su "FLV ......"
content.StartsWith("FLV")
En el servidor puede verificar el tipo MIME, buscar el tipo mime flv aquí o en google.
Debería comprobar que el tipo mime es
video/x-flv
Si estaba usando FileUpload en C #, por ejemplo, podría hacer
FileUpload.PostedFile.ContentType == "video/x-flv"
No podrá restringir el tipo de archivo que el usuario carga en el lado del cliente [*]. Solo podrá hacer esto en el lado del servidor. Si un usuario carga un archivo incorrecto, solo podrá reconocerlo una vez que el archivo se haya cargado. No hay una forma confiable y segura de evitar que un usuario cargue el formato de archivo que desee.
[*] sí, puedes hacer todo tipo de cosas inteligentes para detectar la extensión del archivo antes de comenzar la carga, pero no confíes en ella. Alguien lo evitará y cargará lo que quiera tarde o temprano.
Puede verificar la firma .flv. Puede descargar la especificación aquí:
http://www.adobe.com/devnet/flv/
Consulte el capítulo "El encabezado FLV".
Encontré una solución alternativa en DotNetPerls que me gustó más porque no requiere que especifique una ruta. Aquí hay un ejemplo en el que completé una matriz con la ayuda de un método personalizado
// 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);
El método anterior funciona bien con Firefox e IE, puedo ver todo tipo de archivos como zip, txt, xls, xlsx, doc, docx, jpg, png
pero cuando trato de encontrar la extensión del archivo de googlechrome, fallé.
Vale la pena mencionar cómo eliminar la extensión también en paralelo con la obtención de la extensión:
var name = Path.GetFileNameWithoutExtension(fileFullName); // Get the name only
var extension = Path.GetExtension(fileFullName); // Get the extension only