javascript file-io cross-browser binary-data typed-arrays

javascript - Guardar un Uint8Array en un archivo binario



arraybuffer javascript (1)

Estas son utilidades que utilizo para descargar archivos entre navegadores. Lo ingenioso de esto es que puedes establecer la propiedad de download de un enlace al nombre que quieres que sea tu nombre de archivo.

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

Estoy trabajando en una aplicación web que abre archivos binarios y permite su edición.

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

Esencialmente, quiero ser capaz de guardar el archivo modificado nuevamente como un archivo binario. Idealmente como una descarga de archivos con un nombre de archivo 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 hipervínculo como data:application/octet-stream;base64,.. , junto con el atributo de download para especificar el nombre de archivo .

Parece que funciona, pero es bastante raro y creo que la conversión de los bytes sin formato a una cadena podría introducir problemas de codificación 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 obtener una matriz de bytes como un archivo binario para el usuario?