Reputation: 5
For example:
1. Test1.txt Its base64:VGhpcyBpcyB0ZXN0MS4=
2. Test2.txt Its base64:VGhpcyBpcyBUZXN0Mi4=
My code:
req.busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
console.log('File: ' + filename + ', mimetype: ' + mimetype);
file.pipe(base64.encode()).pipe(output);
var i = 0;
output.on('data', function(data) {
console.log('File [' + filename + '] size: ' + data.length + ' bytes');
base64data[i] = data;
i++;
});
output.on('end', function(){
console.log('Data: ' + base64data);
});
});
Output:
File: Test1.txt, mimetype: text/plain
File: Test2.txt, mimetype: text/plain
File [Test1.txt] size: 16 bytes
File [Test2.txt] size: 16 bytes
File [Test1.txt] size: 16 bytes
File [Test2.txt] size: 16 bytes
File [Test1.txt] size: 4 bytes
File [Test2.txt] size: 4 bytes
File [Test1.txt] size: 4 bytes
File [Test2.txt] size: 4 bytes
Data: VGhpcyBpcyB0ZXN0,VGhpcyBpcyBUZXN0,MS4=,Mi4=
Data: VGhpcyBpcyB0ZXN0,VGhpcyBpcyBUZXN0,MS4=,Mi4=
This result is not correct. I want the right result:
Data:VGhpcyBpcyB0ZXN0MS4=,VGhpcyBpcyBUZXN0Mi4=
How do I modify this code? Help!
Reference robertklep's code:
var base64data = [];
var chunks = [];
var output = new stream.PassThrough();
req.busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
console.log('File: ' + filename + ', mimetype: ' + mimetype);
file.pipe(base64.encode()).pipe(output);
output.on('data', function(data) {
chunks.push(data);
console.log('Chunks: ' + chunks);
});
output.on('end', function(){
base64data.push(Buffer.concat(chunks));
console.log('Data1: ' + base64data);
});
}).on('finish', function(){
console.log('Data2:' + base64data)
});
Output:
File: Test1.txt, mimetype: text/plain
File: Test2.txt, mimetype: text/plain
Chunks: VGhpcyBpcyB0ZXN0
Chunks: VGhpcyBpcyB0ZXN0,VGhpcyBpcyB0ZXN0
Chunks: VGhpcyBpcyB0ZXN0,VGhpcyBpcyB0ZXN0,VGhpcyBpcyBUZXN0
Chunks: VGhpcyBpcyB0ZXN0,VGhpcyBpcyB0ZXN0,VGhpcyBpcyBUZXN0,VGhpcyBpcyBUZXN0
Chunks: VGhpcyBpcyB0ZXN0,VGhpcyBpcyB0ZXN0,VGhpcyBpcyBUZXN0,VGhpcyBpcyBUZXN0,
MS4=
Chunks: VGhpcyBpcyB0ZXN0,VGhpcyBpcyB0ZXN0,VGhpcyBpcyBUZXN0,VGhpcyBpcyBUZXN0,
MS4=,MS4=
Chunks:VGhpcyBpcyB0ZXN0,VGhpcyBpcyB0ZXN0,VGhpcyBpcyBUZXN0,VGhpcyBpcyBUZXN0,
MS4=,MS4=,Mi4=
Chunks: VGhpcyBpcyB0ZXN0,VGhpcyBpcyB0ZXN0,VGhpcyBpcyBUZXN0,VGhpcyBpcyBUZXN0,
MS4=,MS4=,Mi4=,Mi4=
Data2:
Data1: VGhpcyBpcyB0ZXN0VGhpcyBpcyB0ZXN0VGhpcyBpcyBUZXN0VGhpcyBpcyBUZXN0
MS4=MS4=Mi4=Mi4=
Data1: VGhpcyBpcyB0ZXN0VGhpcyBpcyB0ZXN0VGhpcyBpcyBUZXN0VGhpcyBpcyBUZXN0
MS4=MS4=Mi4=Mi4=,VGhpcyBpcyB0ZXN0VGhpcyBpcyB0ZXN0VGhpcyBpcyBUZXN0VGhpcy
BpcyBUZXN0MS4=MS4=Mi4=Mi4=
Upvotes: 0
Views: 2285
Reputation: 203494
You're pushing chunks belonging to different files onto the same array, and also, you need to wait for all files to be processed before you can log it like you want:
var base64data = [];
req.busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
file.pipe(base64.encode()).pipe(output);
var chunks = [];
output.on('data', function(data) {
chunks.push(data);
});
output.on('end', function(){
base64data.push(Buffer.concat(chunks));
});
}).on('finish', function() {
console.log('Data: ' + base64data);
});
Upvotes: 3