0

例:<br> 1. Test1.txt その base64:VGhpcyBpcyB0ZXN0MS4=
2. Test2.txt その base64:VGhpcyBpcyBUZXN0Mi4=

私のコード:

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=

Data2 が空なのはなぜですか? このコードを変更するにはどうすればよいですか? 助けてください!ありがとう〜

file.event(data) で Buffer.toString('base64') を使ってみたのですが、テキストの内容しか変換できず、写真は変換できないのでしょうか?

4

1 に答える 1

2

これらの余分なストリームは必要ありません。ただし、問題は、余分なストリームのendイベントが次のティックで発行されることです (つまり、busboy のfinishイベントの後)。

コードを次のように単純化できるはずです。

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);
})
于 2015-07-14T05:51:31.113 に答える