2010-09-18 9 views
8

Sto lavorando a una webapp che utilizza diverse funzionalità WebKit all'avanguardia. In pratica fa questo: legge un file locale con lo FileReader, decomprime ogni file in una stringa usando una libreria di decompressione JavaScript, e POST ogni file usando XMLHttpRequest. Funziona perfettamente per i file di testo, ma sfortunatamente danneggia i file binari (in questo caso le immagini). Firefox ha un metodo sendAsBinary che risolve questo problema, ma non è standard e, più precisamente, non funziona su WebKit/Chrome da cui dipendiamo per altre funzionalità.Caricamento di una stringa binaria in WebKit/Chrome tramite XHR (equivalente a sendAsBinary di Firefox)

Ci sono un sacco di soluzioni alternative, e finora nessuno di loro lavorano per me:

  • derisione una richiesta di upload di file con le intestazioni, i confini, e così via, in una lunga serie (like this).
  • L'impostazione di un gruppo di intestazioni sull'oggetto XHR (as such)
  • Utilizzando la BlobBuilder, aggiungendo la stringa al costruttore, e l'utilizzo di getBlob per ottenere un blob di caricare (as recommended nel thread problema Chrome su questo)

Quello che sto cercando, soprattutto, è una soluzione compatibile con il futuro. Grazie!

risposta

6

Ho avuto lo stesso problema.

Questo ha funzionato per me:

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); 
} 

controllo qui: http://javascript0.org/wiki/Portable_sendAsBinary

1

È possibile codificarlo con base64 e decodificarlo sul server.

+0

Se si dispone di un facile accesso al server richiesto. Provo ad accedere a un couchdb dal mio dominio (CORS permesso) per mettere un allegato su un documento (http://docs.couchdb.org/en/latest/api/document/attachments.html#put--db-docid-attname). Proverà il trucco di sebastien. – Fluxine

Problemi correlati