class cfilewriter{
constructor(name){
this.tempname = this.uuidv4() + '.bin';
this.stream = null;
this.name = name;
fs.unlink(this.name);
this.stream = fs.createWriteStream(this.tempname, {'flags':'a'});
}
write(dt){
this.stream.write(dt, (err, data) => {
// finish renaming file
if(err) throw err;
alert("write ok !");
this.close();
});
}
uuidv4() {
return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, c =>
(+c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> +c / 4).toString(16)
);
}
close(){
this.stream.end(()=>{
// finish closing file
console.log("finish close file");
fs.rename(this.tempname, this.name, () => {
// finish renaming file
console.log("complete save");
});
});
}
}
var gfile = null;
function save2file(blob){
var reader = new FileReader();
var name = blob.name;
reader.onload = function () { // here we save variable 'file' in closure
console.log(this.result);
var arrayBuffer=this.result;
const buffer = mbuffer.Buffer.from(arrayBuffer);
if (gfile==null) gfile = new cfilewriter(name);
gfile.write(buffer);
//gfile.close();
}
reader.readAsArrayBuffer(blob);
}
this code demo download large file (4gb) to stream .
but i dont know how i copy that stream to download folder.
detail:
- function save2file , read blob only demo to write stream.
- class cfilewwrite used to write stream, save to download.
- this code work , but file dont save in download folder.
everyone help me, i dont have experience in javascript, nodejs. thanks !