2010-09-18 10 views
8

Estoy trabajando en una aplicación web que utiliza varias funciones WebKit de vanguardia. Básicamente hace esto: lee un archivo local con el FileReader, descomprime cada archivo en una cadena usando una biblioteca de descompresión de JavaScript, y POST cada archivo usando XMLHttpRequest. Esto funciona muy bien para los archivos de texto, pero desafortunadamente corrompe los archivos binarios (en este caso, las imágenes). Firefox tiene un método sendAsBinary que resuelve este problema, pero no es estándar, y más concretamente, no funciona en WebKit/Chrome, de lo que dependemos para otras funciones.Carga de una cadena binaria en WebKit/Chrome utilizando XHR (equivalente a sendAsBinary de Firefox)

hay un montón de soluciones, y hasta el momento ninguno de ellos trabajan para mí:

  • que imita una solicitud de carga de archivos con encabezados, límites, y así sucesivamente en una cadena larga (like this).
  • Configuración de un grupo de cabeceras en el objeto XHR (as such)
  • Utilizando el BlobBuilder, añadiendo la cadena al constructor, y el uso de getBlob para obtener una masa para cargar (as recommended en la edición de hilo de cromo sobre esto)

Lo que estoy buscando, más que nada, es una solución compatible con versiones anteriores. ¡Gracias!

Respuesta

6

Tuve el mismo problema.

Esto se trabajó para mí:

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

cheque aquí: http://javascript0.org/wiki/Portable_sendAsBinary

1

Puede codificarlo con base64 y decodificarlo en el servidor.

+0

Si usted tiene un fácil acceso al servidor solicitado. Intento acceder a un couchdb desde mi dominio (CORS permitido) para poner el archivo adjunto en un documento (http://docs.couchdb.org/en/latest/api/document/attachments.html#put--db-docid-attname) Intentaremos el truco de Sebastian. – Fluxine

Cuestiones relacionadas