Nella mia applicazione web (asp.net, c #) sto caricando un file video in una pagina ma voglio caricare solo video flv. Come posso limitare quando carico altri video di estensione?
Nella mia applicazione web (asp.net, c #) sto caricando un file video in una pagina ma voglio caricare solo video flv. Come posso limitare quando carico altri video di estensione?
Risposte:
string myFilePath = @"C:\MyFile.txt";
string ext = Path.GetExtension(myFilePath);
// ext would be ".txt"
Puoi semplicemente leggere il flusso di un file
using (var target = new MemoryStream())
{
postedFile.InputStream.CopyTo(target);
var array = target.ToArray();
}
I primi indici 5/6 ti diranno il tipo di file. In caso di FLV è 70, 76, 86, 1, 5 .
private static readonly byte[] FLV = { 70, 76, 86, 1, 5};
bool isAllowed = array.Take(5).SequenceEqual(FLV);
se è isAlloweduguale al truesuo FLV.
O
Leggi il contenuto di un file
var contentArray = target.GetBuffer();
var content = Encoding.ASCII.GetString(contentArray);
Le prime due / tre lettere ti diranno il tipo di file.
Nel caso di FLV il suo "FLV ......"
content.StartsWith("FLV")
Sul server è possibile controllare il tipo MIME, cercare il tipo flime mime qui o su google.
Dovresti verificare che il tipo mime sia
video/x-flv
Se ad esempio si stesse utilizzando un FileUpload in C #, è possibile farlo
FileUpload.PostedFile.ContentType == "video/x-flv"
Non sarai in grado di limitare il tipo di file che l'utente carica sul lato client [*]. Sarai in grado di farlo solo sul lato server. Se un utente carica un file errato, sarai in grado di riconoscerlo solo dopo aver caricato il file. Non esiste un modo affidabile e sicuro per impedire a un utente di caricare il formato file desiderato.
[*] sì, puoi fare tutti i tipi di cose intelligenti per rilevare l'estensione del file prima di iniziare il caricamento, ma non fare affidamento su di esso. Qualcuno lo aggirerà e caricherà prima o poi quello che vogliono.
Puoi controllare la firma .flv. Puoi scaricare le specifiche qui:
http://www.adobe.com/devnet/flv/
Vedere il capitolo "L'intestazione FLV".
Ho trovato una soluzione alternativa su DotNetPerls che mi è piaciuta di più perché non richiede di specificare un percorso. Ecco un esempio in cui ho popolato un array con l'aiuto di un metodo personalizzato
// 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);
Il metodo sopra funziona perfettamente con Firefox e Internet Explorer, sono in grado di visualizzare tutti i tipi di file come zip, txt, xls, xlsx, doc, docx, jpg, png
ma quando provo a trovare l'estensione del file da googlechrome, ho fallito.
Vale la pena menzionare come rimuovere l'estensione anche in parallelo con ottenere l'estensione:
var name = Path.GetFileNameWithoutExtension(fileFullName); // Get the name only
var extension = Path.GetExtension(fileFullName); // Get the extension only