2010-12-17 10 views
0

Ich dachte, diese beiden Teile des Codes (sie funktionieren in Chrome und Firefox) sollten das gleiche tun, aber sie verhalten sich unterschiedlich. Sie senden den binären Inhalt einer Datei über ein Objekt XmlHttpRequest.HTML5-Datei-API XmlHttpRequest senden (Datei) anders als das Senden von readAsBinaryString() Ergebnis

Direkt XHR senden:

xhr.send(file); 

lesen Datei und die Inhalte über XHR senden:

var reader = new FileReader(); 
reader.onload = function(event) { 
    xhr.send(event.target.result); 
}; 
reader.readAsBinaryString(file); 

Datei-Bytes nicht übereinstimmen zwischen Anfragen gesendet werden (in der zweiten, ist die Datei größer als in der erste, und die Datei wird beschädigt).

Ich muss die zweite Option arbeiten.

Irgendwelche Ideen?

Antwort

1

ich in ein ähnliches Problem lief - Corruption with FileReader into FormData

Das Ergebnis des Lesers ist eine Zeichenfolge; Sie müssen es in einen Array-Puffer konvertieren:

var result = e.target.result; 
var l = result.length 
var ui8a = new Uint8Array(l) 
for (var i = 0; i < l; i++) 
    ui8a[i] = result.charCodeAt(i); 
var bb = new (window.BlobBuilder || window.MozBlobBuilder || window.WebKitBlobBuilder)() 
bb.append(ui8a.buffer) 
xhr.send(bb.getBlob()) 
+0

Funktioniert dieser Code nur in Firefox? –

+0

Es funktioniert in Firefox und Webkit. Opera hat keinen BlobBuilder oder typisierte Arrays. [BlobBuilder.js] (https://github.com/eligrey/BlobBuilder.js) bekommt Sie BlobBuilder, ich versuche herauszufinden, wie man mit fehlenden typisierten Arrays umgehen kann. – aeosynth

Verwandte Themen