In meiner Webanwendung (asp.net, C#) lade ich eine Videodatei auf eine Seite hoch, möchte aber nur FLV-Videos hochladen. Wie kann ich das Hochladen anderer Erweiterungsvideos einschränken?Wie finde ich die Erweiterung einer Datei?
Antwort
string myFilePath = @"C:\MyFile.txt";
string ext = Path.GetExtension(myFilePath);
// ext would be ".txt"
Vielen Dank Herr James es funktioniert gut Vielen Dank für die Antwort –
Dies ermöglicht jemand nur eine Datei * .flv umzubenennen und hochzuladen. Abhängig von Ihren Anforderungen möchten Sie möglicherweise auch den MIME-Typ überprüfen. –
Wird der MIME-Typ normalerweise nicht entsprechend der Dateinamenerweiterung festgelegt? – Thilo
Auf dem Server Sie hier oder auf Google MIME-Typ, Lookup flv MIME-Typ überprüfen.
Sie sollten überprüft werden, dass der Mime-Typ
video/x-flv
ist Wenn Sie einen Fileupload in C# zum Beispiel verwendet haben, könnten Sie
FileUpload.PostedFile.ContentType == "video/x-flv"
tun bin ich nicht sicher, ob dies ist, was Sie wollen, aber:
Directory.GetFiles(@"c:\mydir", "*.flv");
Oder:
Path.GetExtension(@"c:\test.flv")
danke Mr. Carra es funktioniert –
Sie können den Dateityp, den der Benutzer auf der Clientseite [*] hochlädt, nicht einschränken. Sie können dies nur auf der Serverseite tun. Wenn ein Nutzer eine falsche Datei hochlädt, können Sie nur erkennen, dass die Datei hochgeladen wurde. Es gibt keine zuverlässige und sichere Möglichkeit, einen Benutzer anzuhalten, das gewünschte Dateiformat hochzuladen.
[*] Ja, Sie können alle möglichen cleveren Dinge tun, um die Dateierweiterung zu erkennen, bevor Sie den Upload starten, aber verlassen Sie sich nicht darauf. Irgendjemand wird sich darum kümmern und früher oder später hochladen, was immer sie wollen.
Während er nicht verhindern kann, dass ein Hacker, was er will hochladen, sollte er immer noch auf der Client-Seite als eine Annehmlichkeit für den Benutzer überprüfen. Flash-Uploader sollten den Dateityp überprüfen können. – Thilo
Das OP erwähnte keine Flash-Uploader (das sind "in Flash geschriebene Uploader" und nicht "Uploader von Flash-Inhalten"). Die Frage wird mit asp.net und C# -Tags markiert, und mit diesen Technologieoptionen ist die clientseitige Überprüfung begrenzt und leicht zu besiegen. :) – ZombieSheep
Für eine Video-Upload-Website sollte er auf der Client-Seite etwas besseres haben als ein HTML-Upload-Formular. Multi-MB-Uploads ohne Fortschrittsbalken machen keinen Spaß. – Thilo
Sie können die .flv-Signatur prüfen. Sie können Spezifikation hier herunterladen:
http://www.adobe.com/devnet/flv/
Siehe "Die FLV-Header" Kapitel.
Darüber hinaus, wenn Sie eine FileInfo fi
haben, können Sie einfach tun:
string ext = fi.Extension;
und es wird die Erweiterung der Datei (Note halten: es wird die .
umfassen, so ein Ergebnis der oben sein könnte: .jpg
.txt
, und so weiter ....
Sie einfach den Strom einer Datei lesen kann
using (var target = new MemoryStream())
{
postedFile.InputStream.CopyTo(target);
var array = target.ToArray();
Erste 5/6 Indizes geben Ihnen den Dateityp an. Bei FLV ist
private statische Readonly Byte [] FLV = {70, 76, 86, 1, 5};
Just do - var isAllowed = array.Take(5).SequenceEqual(FLV);
wenn ja dann seine FLV.
ODER
Lesen Sie den Inhalt einer Datei
var contentArray = target.GetBuffer();
var content = Encoding.ASCII.GetString(contentArray);
ersten zwei/drei Buchstaben, die Sie den Dateityp wird es zeigen. Im Fall von FLV seine
"FLV | \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 ......"
Just do - content.StartsWith("FLV")
Dies sollte höher eingestuft werden. Wenn Sie wirklich möchten, dass Ihre Anwendung funktioniert und die Daten nicht vertrauenswürdig sind, sollten Sie den Anfang überprüfen. – PRMan
Diese Lösung auch in Fällen von mehr als eine Erweiterung hilft wie „Avishay.student.DB“
FileInfo FileInf = new FileInfo(filePath);
string strExtention = FileInf.Name.Replace(System.IO.Path.GetFileNameWithoutExtension(FileInf.Name), "");
eine alternative Lösung über bei DotNetPerls gefunden, dass ich es besser gefallen, weil es Sie nicht benötigen, um einen Pfad angeben Hier ist ein Beispiel, wo ich ein Array mit Hilfe einer benutzerdefinierten Methode
bevölkerte // 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 dem Firefox und IE, ich bin in der Lage, alle Arten von Dateien wie zip, txt zu sehen, xls, xlsx, doc, docx, jpg, png
aber wenn ich versuche, die Erweiterung der Datei von googlechrome zu finden, schlug ich fehl.
- 1. Wie finde ich die Codierung einer Datei? C#
- 2. Wie finde ich die URL zum Herunterladen einer Datei?
- 3. Wie finde ich die Erstellungszeit einer Datei mit Java?
- 4. Wie finde ich die Koordinaten einer Adresse?
- 5. Wie finde ich die Größe einer Struktur?
- 6. Wie finde ich die natürliche Größe/Größe einer Flash SWF-Datei?
- 7. Wie finde ich die Datei, die einen Mysql-Syntaxfehler verursacht
- 8. Wie finde ich eine Datei mit Javascript?
- 9. Wo finde ich php_memcached.dll PHP-Erweiterung?
- 10. Wie finde ich heraus, welche Visual Studio-Erweiterung Speicherlecks verursacht?
- 11. Wie finde ich die Signatur der Apk-Datei?
- 12. Wo finde ich die Datei sqljdbc_xa.dll?
- 13. Wie füge ich beim Herunterladen einer Datei eine Erweiterung hinzu?
- 14. Wie speichere ich eine Datei mit einer benutzerdefinierten Erweiterung?
- 15. Wie finde ich den Zusammenführungskonflikt in einer großen Datei?
- 16. Wie referenziere ich eine Datei im Datenverzeichnis einer Firefox-Erweiterung?
- 17. Wie finde ich den Pfad zu einer SSL-Datei?
- 18. Wie finde ich alle in einer PHP-Datei verwendeten Klassen?
- 19. Wie finde ich die Länge einer Linkedlist in einer Linkedlist?
- 20. Wie finde ich die Route, die mit einer URL übereinstimmt?
- 21. Wie finde ich die Schriftbreite?
- 22. Wie finde ich die Seitennummer für ein bestimmtes Mitglied einer Gruppe in einer .rpt-Datei?
- 23. Wie finde ich die Datei config.m4 auf GoDaddy?
- 24. Wie finde ich die lokalen Variablen in Heap-Datei
- 25. Wie finde ich eine Datei in Project?
- 26. Wie entferne ich die Erweiterung eines Positionsparameters?
- 27. Wie finde ich die Hauptfunktion meines Programms (...)?
- 28. Github API: Wie finde ich die Zweige einer Pull-Anfrage?
- 29. Wie finde ich die Route einer aktuellen Seite?
- 30. Wie finde ich die Länge einer Array-Klasse?
Wenn möglich, möchten Sie auch den Client überprüfen, um unnötige Uploads zu vermeiden. – Thilo
Ja, aber sehen Sie meine Antwort unten - verlassen Sie sich nicht auf die Überprüfung auf der Client-Seite - es wird früher oder später umgangen werden. :) – ZombieSheep
Die clientseitige Überprüfung ist kein Schutz für Ihren Server, sondern ein Komfort für den Benutzer. – Thilo