如何使用busboy上传base64数据

时间:2015-06-29 08:38:33

标签: node.js busboy

例如:
1. Test1.txt其base64:VGhpcyBpcyB0ZXN0MS4 =
2. Test2.txt其base64:VGhpcyBpcyBUZXN0Mi4 =

我的代码:

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

输出:
文件:Test1.txt,mimetype:text / plain
文件:Test2.txt,mimetype:text / plain
文件[Test1.txt]大小:16字节
文件[Test2.txt]大小:16字节
文件[Test1.txt]大小:16字节
文件[Test2.txt]大小:16字节
文件[Test1.txt]大小:4字节
文件[Test2.txt]大小:4个字节
文件[Test1.txt]大小:4字节
文件[Test2.txt]大小:4个字节
数据:VGhpcyBpcyB0ZXN0,VGhpcyBpcyBUZXN0,MS4 =,Mi4 =
数据:VGhpcyBpcyB0ZXN0,VGhpcyBpcyBUZXN0,MS4 =,Mi4 =

此结果不正确。我想要正确的结果:
数据:VGhpcyBpcyB0ZXN0MS4 =,VGhpcyBpcyBUZXN0Mi4 =
如何修改此代码?救命啊!

参考robertklep的代码:

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

输出:

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=

1 个答案:

答案 0 :(得分:2)

您正在将属于不同文件的块推送到同一个阵列上,而且,您需要等待所有文件处理,然后才能按照您的需要进行记录:

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);
});
相关问题