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.