JQuery appena avvolge l'API File sottostante utilizzato nella maggior parte dei browser, quindi non c'è alcuna differenza come JQuery e Javascript gestire i file ei tipi MIME. Ecco le specifiche API File:
http://www.w3.org/TR/FileAPI/#dfn-type
L'oggetto File
che si stanno manipolando eredita il tipo proprietà dall'oggetto Blob
, e il browser utilizza il blob (matrice di byte) per determinare il tipo MIME.
Per eseguire questa operazione, ciascun browser implementa un algoritmo di sniffing dei file per "leggere" il tipo MIME dall'array di byte e, se il tipo mime non corrisponde, restituirà una stringa vuota come nel proprio scenario sopra.
Ecco tutte le specifiche algoritmo:
https://mimesniff.spec.whatwg.org/
Così ora vi state chiedendo il motivo per cui non funziona per i file RAR TAR, ZIP e, e perché funziona per alcune persone e non per tu? .. perché l'algoritmo di sniffing dei file non è evidentemente perfetto.
Utilizza il modello di byte corrispondente a e non sembra abbastanza affidabile.
Per esempio ho usato WinRaR sul mio Windows 8 box per comprimere un file, ei byte iniziali del file creato sono:
52 61 72 21 1A 07 00
Tuttavia, per riconoscerlo come.RAR l'algoritmo modello del browser di byte corrispondenti aspetta
52 61 72 20 1A 07 00
Come si vede c'è una leggera differenza, e quando ho caricato il mio file RAR al browser di utilizzare il codice di cui sopra, Firefox non era in grado di riconoscere il Mime -Tipo, e ho ottenuto una stringa vuota nella proprietà type.
Tuttavia, quando ho confezionato un file ZIP utilizzando WinRar sulla stessa macchina con le impostazioni predefinite genera una sequenza iniziale array di byte di 50 4B 03 04
che abbinato con il modello di cerniera di byte previsto dall'algoritmo, e quando ho usato il codice di sopra di esso è stato in grado di rilevare il tipo mime correttamente come application/zip!
Come si vede dalla mia spiegazione, si tratta di serializzazione e "imperfezione" dell'algoritmo che corrisponde ai byte serializzati con le estensioni mime nei browser.
Sulla base di tutto quanto sopra menzionato, consiglierei di NON fare affidamento sul mime sniffing, e invece di usare il codice personalizzato per determinare il tipo MIME O le librerie esistenti. È possibile utilizzare un approccio lato server o lato client.
Se si vuole attaccare al cliente si potrebbe usare la seguente libreria JS:
https://github.com/rsdoiel/mimetype-js
E poi scoprire il tipo MIME sarebbe una questione di una riga di codice:
Ecco un violino di lavoro, aggiornare il proprio esempio per utilizzare mimetype JS:
http://jsfiddle.net/jd8h7wvs/4/
Non hai aggiunto jQuery al tuo violino. Confermato di non lavorare con i file tar. – DanFromGermany
In quale sistema operativo ci si trova? Potrebbe essere che il browser stia delegando al sistema operativo per risolvere il tipo mime, o non vi è alcuna associazione nella configurazione del browser tra quella estensione di file e il suo tipo mime. Cercando di configurare il tuo browser per sapere quale programma esterno dovrebbe aprire .tar o .rar. Forse questo ti aiuterà? –
Va bene per rar e tar, restituisce: Type è application/x-rar (o x-tar) su MacOs/Chrome. Su quale SO/browser lo stai testando? – enguerranws