2011-01-17 12 views
7

Ich versuche, die Dateien mit den HTML5-Funktionen hochzuladen. Wie die Untersuchung ergab, gibt es 3 verschiedene Möglichkeiten, die Dateien hochzuladen,HTML5-Dateiupload-Erkennungsfunktionen im Browser

  1. Durch die Codierung der Datei als multipart: Dies ist nur möglich, wenn nur Dateireader unterstützt wird.
  2. Senden von Binärdaten mit der XMLHTTP2 (AJAX) -Spec-Methode: Die neue Methode send(Blob/File) kann die Binärdaten über die Leitung senden.
  3. FormData-Objekt: Verwenden XMLHTTP(AJAX) send(FormData) Methode.

Jetzt für Cross-Browser-Probleme und Feature-Erkennungen wie unten Snippet ist einfach,

if(typeof FileReader == "undefined") 

aber ich bin nicht sicher, wie Sie herausfinden, wenn send() -Methode des AJAX in aktuellen Browser ist send(FormData) or send(Blob/File) unterstützt Methodenimplementierung Wie finde ich es? Gibt es hier einen Object.property-Trick? Oder etwas anderes?

Danke,

+1

Aus dem Lesen der Spezifikation scheint mir, dass send (Blob/File) unterstützt wird, wenn typeof FileReader! = 'Undefined', aber das ist reine Spekulation –

+0

http://stackoverflow.com/questions/2311887/how- to-determined-presence-of-html5-traildrop-Datei-upload-api-like-the-one-from/2312859 # 2312859 –

+0

Die oben genannten scheint in Bezug auf die FileReader oder? DataTransfer Objekt ist in Drag Drop aber ich würde gerne wissen, wie man die send (Datei) erkennt, wo wir irgendwie herausfinden können, dass die send() Methode von AJAX Unterstützung für das File Objekt hat oder nicht? –

Antwort

2

binäre Daten verarbeiten Sie WebSockets nutzen wollen. Dies ist Teil der neuen HTML5 spec. Es gibt jedoch ein Problem. Ab Mitte Dezember 2010 wurden WebSockets aufgrund einer Cache-Poisoning-Schwachstelle in jedem gängigen Browser deaktiviert.

Zuletzt hörte ich, dass dies immer noch sorted out war.

Um die Datei vor dem Senden über WebSockets hochzuladen, sollten Sie die FileReader API verwenden, die in der neuesten Version jedes Browsers unterstützt wird (nach meinem besten Wissen).

Um zu überprüfen, ob die Filereader sollten Sie unterstützt wird getestet, wie:

if (window.URL){ 
    // 
} 

für eine Alternative:

if (FileReader){ 
    // It's supported 
} 

Sie auch überprüfen können.

+0

if (FileReader) gibt einen Fehler in Safari aus. Aber das funktioniert "if (window.FileReader)" – Dan