Wie der Inhalt einer hochgeladenen Datei zu überprüfen, ohne auf seiner Verlängerung zu verlassen?

StackOverflow https://stackoverflow.com/questions/245183

  •  05-07-2019
  •  | 
  •  

Frage

Wie gehen Sie über den Typ einer hochgeladenen Datei zuverlässig zu überprüfen, ohne die Erweiterung zu verwenden? Ich vermute, dass Sie den Header prüfen haben, / einige der Bytes gelesen, aber ich habe wirklich keine Ahnung, wie es geht. Im mit c # und asp.net.

Vielen Dank für jede Beratung.


ok, also von dem oben genannten Link weiß ich jetzt, dass ich für ‚ff d8 ff e0‘ suche positiv eine JPG-Datei zum Beispiel zu identifizieren.

In meinem Code kann ich die ersten zwanzig Bytes kein Problem lesen:

                FileStream fs = File.Open(filePath, FileMode.Open);
                Byte[] b = new byte[20];
                fs.Read(b, 0, 20);

so (und bitte meine Gesamtunerfahrenheit hier entschuldigen), aber wie kann ich überprüfen, ob der Byte-Array enthält 'ff d8 ff e0'?

War es hilfreich?

Lösung

Hier ist eine schnelle und unsaubere Antwort auf die Frage followup Sie auf dem Laufenden:

byte[] jpg = new byte[] { 0xFF, 0xD8, 0xFF, 0xE0 };
bool match = true;
for (int i = 0; i < jpg.Length; i++)
{
    if (jpg[i] != b[i])
    {
        match = false;
        break;
    }
}

Andere Tipps

Das ist in der Tat, was der Unix file Programm tut, mit mehr oder weniger Grad an Zuverlässigkeit. Zum Teil hängt es davon ab, ob die Programme, der Dateien Sie versuchen, sendet eine Datei-Header zu erfassen; das Programm tar ist berüchtigt für nicht zu tun. Es hängt davon ab, wie viele Arten von Dateien planen Sie versuchen, und zu erkennen, aber es könnte auch am einfachsten sein, um eine Implementierung von file zu verwenden; es erkennt viele Dateitypen und moderne Versionen sind über eine Datei von zusätzlichen Dateitypdefinitionen erweiterbar, die eine Vielzahl von Szenarien verarbeiten können.

Die ersten paar Bytes einer Datei werden Sie oft sagen, den Dateityp. Siehe zum Beispiel
http://www.garykessler.net/library/file_sigs.html
http://www.astro.keele.ac.uk/ oldusers / RNO / Computing / File_magic.html

Verwenden System.IO die byes als binäre nach dem Upload zu lesen.

Ich bin gespannt, obwohl, warum können Sie nicht auf dem Contenttype-Header verlassen?

Wotsit ist eine gute Ressource für die Suche nach den magischen Zahlen für verschiedene Dateitypen aus.

den Inhalt der Datei zu lesen, ist die narrensicher Weg. Da Sie es in .Net bauen, könnten Sie wahrscheinlich den MIME-Typ der hochgeladenen Datei überprüfen.

Sie können urlmon.dll DllImport zu helfen. Bitte beziehen Sie sich einen Beitrag unter: http://coding-passion.blogspot.com/2008/ 11 / Validierung-file-type.html

Und in Bezug auf Content-type zu klären, wird es unweigerlich durch die Erweiterung der Datei angetrieben. So auch eine ZIP-Datei wurde seine Erweiterung .txt umbenannt, wird der Inhaltstyp noch Text nur sagen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top