HTML5 File API readAsBinaryString lee archivos como mucho más grandes, diferentes a los archivos en el disco

Código completo enhttps: //gist.github.com/99256.

Estoy usando la API de archivos HTML y arrastrar / soltar para cargar archivos a través de una publicación XHR en un script PHP. Procedimentalmente, todo parece estar funcionando bien, sin embargo, cuando intento abrir los archivos cargados, cualquier archivo que no sea de texto es mucho más grande que el archivo de origen y no se abrirá. Claramente, no son los mismos datos que estaban en el disco de origen. Sin embargo, los archivos de texto son exactamente iguales y se abren bien.

Algunos ejemplos en una carga de arrastrar / soltar de 3 archivos: archivo 1: texto / XML: en el disco 13 KB, cargado 13 KB, funciona perfectamente archivo 2: imagen / PNG: en el disco 14 KB, cargado 18 KB, no Abra el archivo 3: aplicación / XLSX: en el disco 12 KB, cargado 14 KB, no se abrirá

Todo se reduce a esto (después de configurar los encabezados xhr, el objeto de archivo está listo, etc.):

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

volviendo datos grandes y malos. ¿Hay algo claramente malo en ello?

Respuestas a la pregunta(1)

Su respuesta a la pregunta