2015-07-02 2 views
0

Например:
1. test1.txt Его base64: VGhpcyBpcyB0ZXN0MS4 =
2. test2.txt Его base64: VGhpcyBpcyBUZXN0Mi4 =
В busboy.event (финишного) я не могу получить file.pipe.object результат

Мой код:

var busboy = new Busboy({ headers: req.headers }); 
var base64data = []; 
busboy.on('file', function(fieldname, file, filename, encoding, mimetype) { 
    var output = stream.PassThrough(); 
    var chunk = []; 
    console.log('File: ' + filename + ', mimetype: ' + mimetype); 
    file.pipe(base64.encode()).pipe(output); 
    output.on('data', function(data) { 
     chunk.push(data); 
     console.log('Chunk: ' + chunk); 
    }); 
    output.on('end', function(){ 
     base64data.push(Buffer.concat(chunk)); 
     console.log('Data1: ' + base64data); 
    }); 
}).on('finish', function(){ 
    console.log('Data2: ' + base64data); 
}) 

выход:

File: Test1.txt, mimetype: text/plain 
File: Test2.txt, mimetype: text/plain 
Chunk: VGhpcyBpcyB0ZXN0 
Chunk: VGhpcyBpcyBUZXN0 
Chunk: VGhpcyBpcyB0ZXN0,MS4= 
Chunk: VGhpcyBpcyBUZXN0,Mi4= 
Data2: 
Data1: VGhpcyBpcyB0ZXN0MS4= 
Data1: VGhpcyBpcyB0ZXN0MS4=,VGhpcyBpcyBUZXN0Mi4= 

W hy является Data2 пустым? Как мне изменить этот код? Пожалуйста помоги! Спасибо ~

Я попытался использовать Buffer.toString ('base64') в файле .event (data), но он может конвертировать только текстовое содержимое, изображения не могут быть преобразованы?

ответ

1

Вам не нужны эти дополнительные потоки. Проблема состоит в том, что события дополнительного потока end испускаются на следующем тике (таким образом, после события finish busboy).

Вы должны быть в состоянии упростить код для этого:

var busboy = new Busboy({ headers: req.headers }); 
var base64data = []; 
busboy.on('file', function(fieldname, file, filename, encoding, mimetype) { 
    console.log('File: ' + filename + ', mimetype: ' + mimetype); 
    var buffer = ''; 
    file.setEncoding('base64'); 
    file.on('data', function(data) { 
    // `data` is now a base64-encoded chunk of file data 
    buffer += data; 
    }).on('end', function() { 
    base64data.push(buffer); 
    }); 
}).on('finish', function(){ 
    console.log('Data2: ' + base64data); 
}) 
+0

Я понимаю, ~ Спасибо очень много! – Nix

Смежные вопросы