new manejo leer example convert contenido archivos archivo javascript angularjs node.js file-upload blob

manejo - Cómo convertir Blob a archivo en JavaScript



new file javascript (5)

Esta función convierte un Blob en un File y funciona muy bien para mí.

JavaScript vainilla

function blobToFile(theBlob, fileName){ //A Blob() is almost a File() - it''s just missing the two properties below which we will add theBlob.lastModifiedDate = new Date(); theBlob.name = fileName; return theBlob; }

TypeScript (con tipos adecuados)

public blobToFile = (theBlob: Blob, fileName:string): File => { var b: any = theBlob; //A Blob() is almost a File() - it''s just missing the two properties below which we will add b.lastModifiedDate = new Date(); b.name = fileName; //Cast to a File() type return <File>theBlob; }

Uso

var myBlob = new Blob(); //do stuff here to give the blob some data... var myFile = blobToFile(myBlob, "my-image.png");

Necesito subir una imagen al servidor NodeJS a algún directorio. Estoy usando el módulo de nodo connect-busboy para eso.

Tenía el dataURL de la imagen que convertí a blob usando el siguiente código:

dataURLToBlob: function(dataURL) { var BASE64_MARKER = '';base64,''; if (dataURL.indexOf(BASE64_MARKER) == -1) { var parts = dataURL.split('',''); var contentType = parts[0].split('':'')[1]; var raw = decodeURIComponent(parts[1]); return new Blob([raw], {type: contentType}); } var parts = dataURL.split(BASE64_MARKER); var contentType = parts[0].split('':'')[1]; var raw = window.atob(parts[1]); var rawLength = raw.length; var uInt8Array = new Uint8Array(rawLength); for (var i = 0; i < rawLength; ++i) { uInt8Array[i] = raw.charCodeAt(i); } return new Blob([uInt8Array], {type: contentType}); }

Necesito una forma de convertir el blob en un archivo para cargar la imagen.

¿Podría alguien ayudarme con eso?


La respuesta de Joshua P. Nixon es correcta pero también tuve que establecer la última fecha de modificación. Así que aquí está el código.

var file = new File([blob], "file_name", {lastModified: 1534584790000});

1534584790000 es una marca de tiempo unix para " GMT: sábado 18 de agosto de 2018 9:33:10 a.m. "


Mi variante moderna :

function blob2file(blobData) { const fd = new FormData(); fd.set(''a'', blobData); return fd.get(''a''); }


Puedes usar el constructor de archivos:

var file = new File([myBlob], "name");

Según la especificación w3, esto agregará los bytes que contiene el blob a los bytes del nuevo objeto File y creará el archivo con el nombre especificado http://www.w3.org/TR/FileAPI/#dfn-file


Use saveAs en el proyecto github de FileSaver.js .

FileSaver.js implementa la saveAs() FileSaver en navegadores que no lo admiten de forma nativa.