JQuery wickelt nur den zugrunde liegenden Datei-API in den meisten Browsern verwendet wird, so gibt es keinen Unterschied, wie JQuery und Javascript-Dateien und MIME-Typen verarbeiten. Hier ist die Datei-API-Spezifikation:
http://www.w3.org/TR/FileAPI/#dfn-type
Das File
Objekt, das Sie erbt die Typ Eigenschaft aus dem Blob
Objekt manipulieren, und der Browser verwendet den Blob (Byte-Array), um den MIME-Typ zu bestimmen.
Um diese Aufgabe zu erfüllen, implementiert jeder Browser einen Datei-Sniffing-Algorithmus, um den MIME-Typ aus dem Byte-Array zu lesen, und wenn der MIME-Typ nicht übereinstimmt, gibt er eine leere Zeichenfolge wie in Ihrem obigen Szenario zurück. Hier
ist der vollständige Algorithmus spec:
https://mimesniff.spec.whatwg.org/
So, jetzt Sie fragen sich, warum es nicht für TAR, ZIP und RAR-Dateien funktioniert, und warum es für manche Menschen funktioniert und nicht für Sie? .. weil der Datei-Sniffing-Algorithmus offensichtlich nicht perfekt ist.
Es verwendet Byte-Muster passend, und das scheint nicht zuverlässig genug.
Zum Beispiel habe ich WinRaR auf meinem Windows-8-Box verwendet, um eine Datei zu komprimieren, und das erste Bytes der erstellten Datei ist:,
52 61 72 21 1A 07 00
jedoch als zu erkennen.RAR der Browser-Byte-Pattern-Matching-Algorithmus erwartet
52 61 72 20 1A 07 00
Wie Sie sehen, dass es ein kleiner Unterschied ist, und wenn ich meine RAR-Datei in den Browser hochgeladen Ihren Code oben, Firefox war nicht in der Lage, die Mime zu erkennen -Type, und ich habe eine leere Zeichenfolge in der Eigenschaft type.
Wenn ich jedoch eine ZIP-Datei mit WinRar auf dem gleichen Computer mit Standardeinstellungen gepackt hat, erzeugt es eine erste Byte-Array-Sequenz von 50 4B 03 04
, die mit dem vom Algorithmus erwarteten Zip-Byte-Muster übereinstimmt, und wenn ich den Code darüber verwendete war in der Lage, den Mime-Typ richtig als Anwendung/zip zu erkennen!
Wie Sie aus meiner Erklärung sehen, ist es eine Frage der Serialisierung und der "Unvollkommenheit" des Algorithmus, der die serialisierten Bytes mit Pantomime-Erweiterungen in den Browsern übereinstimmt.
Basierend auf allem, was oben erwähnt wurde, würde ich empfehlen, sich NICHT auf das Mime Sniffing zu verlassen, und stattdessen Ihren benutzerdefinierten Code verwenden, um den MIME-Typ ODER vorhandene Bibliotheken zu bestimmen. Sie können einen serverseitigen oder einen clientseitigen Ansatz verwenden.
Wenn Sie an den Client bleiben Sie folgende JS-Bibliothek verwenden:
https://github.com/rsdoiel/mimetype-js
Und dann den Mime-Typ entdecken eine Frage der eine Zeile Code wäre:
Hier ist ein funktionierendes Fiddle, Ihr Beispiel ein Upgrade MIME-Typ js zu verwenden:
http://jsfiddle.net/jd8h7wvs/4/
Sie haben jQuery nicht zu Ihrer Geige hinzugefügt. Bestätigt, nicht mit tar-Dateien zu arbeiten. – DanFromGermany
Mit welchem Betriebssystem arbeiten Sie? Es kann sein, dass der Browser an das Betriebssystem delegiert, um den MIME-Typ aufzulösen, oder dass in der Browserkonfiguration keine Verbindung zwischen dieser Dateierweiterung und ihrem MIME-Typ besteht. Versuchen Sie, Ihren Browser so zu konfigurieren, dass er weiß, welches externe Programm eine .tar- oder .rar-Datei öffnen soll. Vielleicht hilft das? –
Es ist in Ordnung für Rar und Teer, es gibt zurück: Typ ist Anwendung/X-Rar (oder X-Tar) auf MacOs/Chrome. Auf welchem Betriebssystem/Browser testen Sie es? – enguerranws