In meiner Webanwendung (asp.net, c #) lade ich eine Videodatei auf einer Seite hoch, möchte aber nur flv-Videos hochladen. Wie kann ich einschränken, wenn ich andere Erweiterungsvideos hochlade?
In meiner Webanwendung (asp.net, c #) lade ich eine Videodatei auf einer Seite hoch, möchte aber nur flv-Videos hochladen. Wie kann ich einschränken, wenn ich andere Erweiterungsvideos hochlade?
Antworten:
string myFilePath = @"C:\MyFile.txt";
string ext = Path.GetExtension(myFilePath);
// ext would be ".txt"
Sie können einfach den Stream einer Datei lesen
using (var target = new MemoryStream())
{
postedFile.InputStream.CopyTo(target);
var array = target.ToArray();
}
Die ersten 5/6-Indizes geben Auskunft über den Dateityp. Im Falle von FLV sind es 70, 76, 86, 1, 5 .
private static readonly byte[] FLV = { 70, 76, 86, 1, 5};
bool isAllowed = array.Take(5).SequenceEqual(FLV);
wenn isAllowedgleich truedann sein FLV.
ODER
Lesen Sie den Inhalt einer Datei
var contentArray = target.GetBuffer();
var content = Encoding.ASCII.GetString(contentArray);
Die ersten zwei / drei Buchstaben geben den Dateityp an.
Im Falle von FLV ist es "FLV ......"
content.StartsWith("FLV")
Auf dem Server können Sie hier oder bei Google den MIME-Typ und den MIM-Typ nachschlagen.
Sie sollten überprüfen, ob der MIME-Typ ist
video/x-flv
Wenn Sie beispielsweise einen FileUpload in C # verwenden, können Sie dies tun
FileUpload.PostedFile.ContentType == "video/x-flv"
Sie können den Dateityp, den der Benutzer auf der Clientseite hochlädt, nicht einschränken [*]. Dies ist nur auf der Serverseite möglich. Wenn ein Benutzer eine falsche Datei hochlädt, können Sie dies erst erkennen, wenn die Datei hochgeladen wurde. Es gibt keine zuverlässige und sichere Möglichkeit, einen Benutzer daran zu hindern, das gewünschte Dateiformat hochzuladen.
[*] Ja, Sie können alle möglichen cleveren Dinge tun, um die Dateierweiterung zu erkennen, bevor Sie mit dem Hochladen beginnen, aber verlassen Sie sich nicht darauf. Jemand wird es umgehen und früher oder später hochladen, was er will.
Sie können die FLV-Signatur überprüfen. Sie können die Spezifikation hier herunterladen:
http://www.adobe.com/devnet/flv/
Siehe Kapitel "Der FLV-Header".
Bei DotNetPerls wurde eine alternative Lösung gefunden , die mir besser gefallen hat, da Sie keinen Pfad angeben müssen. Hier ist ein Beispiel, in dem ich ein Array mithilfe einer benutzerdefinierten Methode gefüllt habe
// 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);
Die obige Methode funktioniert gut mit Firefox und IE. Ich kann alle Arten von Dateien wie zip, txt, xls, xlsx, doc, docx, jpg, png anzeigen
aber als ich versuche, die Dateierweiterung von googlechrome zu finden, bin ich gescheitert.
Es ist erwähnenswert, wie die Erweiterung auch parallel zum Abrufen der Erweiterung entfernt werden kann:
var name = Path.GetFileNameWithoutExtension(fileFullName); // Get the name only
var extension = Path.GetExtension(fileFullName); // Get the extension only