2010-09-18 10 views
8

Pracuję nad aplikacją internetową korzystającą z kilku nowoczesnych funkcji WebKit. Zasadniczo robi to: odczytuje lokalny plik z FileReader, rozpakowuje każdy plik w łańcuchu przy użyciu biblioteki rozpakowania JavaScript i POSTs każdego pliku przy użyciu XMLHttpRequest. Działa to znakomicie dla plików tekstowych, ale niestety psuje pliki binarne (w tym przypadku obrazy). Firefox ma metodę sendAsBinary, która rozwiązuje ten problem, ale jest nietypowa, a co więcej, nie działa ona w WebKit/Chrome, od czego zależy nam na innych funkcjach.Przesyłanie binarnego ciągu znaków w WebKit/Chrome przy użyciu XHR (odpowiednik funkcji sendAsBinary przeglądarki Firefox)

Istnieje mnóstwo z obejścia, a do tej pory żaden z nich nie działa dla mnie:

  • Mocking plik żądania przesyłania nagłówków, z granicami, i tak dalej w długi ciąg (like this).
  • Ustawianie kilka nagłówków na obiekcie XHR (as such)
  • Używanie BlobBuilder, dołączając ciąg do konstruktora, a używając getBlob aby uzyskać blob przesłać (as recommended w emisyjnej wątku Chrome o tym)

To, czego szukam, to przede wszystkim kompatybilne rozwiązanie. Dzięki!

Odpowiedz

6

Miałem ten sam problem.

Ten pracował dla mnie:

XMLHttpRequest.prototype.sendAsBinary = function(datastr) { 
    function byteValue(x) { 
     return x.charCodeAt(0) & 0xff; 
    } 
    var ords = Array.prototype.map.call(datastr, byteValue); 
    var ui8a = new Uint8Array(ords); 
    this.send(ui8a.buffer); 
} 

sprawdzić tutaj: http://javascript0.org/wiki/Portable_sendAsBinary

1

Można kodować za pomocą base64 i dekodować go na serwerze.

+0

Jeśli masz łatwy dostęp do żądanego serwera. Próbuję uzyskać dostęp do couchdb z mojej domeny (dozwolonego przez CORS), aby umieścić załącznik na dokumencie (http://docs.couchdb.org/en/latest/api/document/attachments.html#put--db-docid-attname). Spróbuje triku sebastien. – Fluxine

Powiązane problemy