Guardar un Uint8Array en un file binary

Estoy trabajando en una aplicación web que abre files binarys y permite su edición.

Este process es básicamente ondrop -> dataTransfer.files[0] -> FileReader -> Uint8Array

Esencialmente, quiero ser capaz de save el file modificado nuevamente como un file binary. Idealmente como una descarga de files con un nombre de file especificado.

No parece haber ningún método estándar para hacer esto, y eso apesta, porque todo hasta ese punto está bien soportado.

Actualmente estoy convirtiendo la matriz en una cadena usando String.fromCharCode() , base64 codificando eso, y usando un uri de datos en un hyperlink como data:application/octet-stream;base64,.. , junto con el atributo de download para especificar el nombre de file .

Parece que funciona, pero es bastante raro y creo que la conversión de los bytes sin formatting a una cadena podría introducir problemas de encoding según los valores de los bytes. No quiero que la información se corrompa o rompa la cadena.

Salvo eso, ¿existe un método mejor / apropiado para get una matriz de bytes como un file binary para el usuario?

Estas son utilidades que utilizo para download files entre browseres. Lo ingenioso de esto es que puedes establecer la propiedad de download de un enlace al nombre que quieres que sea tu nombre de file.

FYI el mimeType for binary es application/octet-stream

 var downloadBlob, downloadURL; downloadBlob = function(data, fileName, mimeType) { var blob, url; blob = new Blob([data], { type: mimeType }); url = window.URL.createObjectURL(blob); downloadURL(url, fileName, mimeType); setTimeout(function() { return window.URL.revokeObjectURL(url); }, 1000); }; downloadURL = function(data, fileName) { var a; a = document.createElement('a'); a.href = data; a.download = fileName; document.body.appendChild(a); a.style = 'display: none'; a.click(); a.remove(); }; 

Uso:

 downloadBlob(myBinaryBlob, 'some-file.bin', 'application/octet-stream');