2015-08-07 2 views
8

Когда вызывается следующий API POST, он должен сохранить файл в файловой системе. Однако файл не сохраняется. Я вижу файл в консоли, но не могу его сохранить или записать. У меня есть следующий код:Busboy и GridFS не будут сохранять файл в файловой системе

router.post('/notes', function(req, res, next) { 
    var gfsstream, startFileWrite, endFileWriteTime; 
    var busboy = new Busboy({ headers: req.headers }); 

    busboy.on('file', function(fieldname, file, filename, encoding, mimetype) { 
    startFileWrite = new Date().getTime(); 
    console.log('File [' + fieldname + ']: filename: ' + filename); 

    gfsstream = gfs.createWriteStream('/uploads'); 
    file.on('data', function(data) { 
     gfsstream.write(data); 
    }); 
    file.on('end', function() { 
     gfsstream.end(); 
     req.pipe(gfsstream); 
    }); 
    gfsstream.on('close', function (file) { 
     // do something with `file` 
    endFileWrite = new Date().getTime(); 
    console.log('File [' + fieldname + '] Finished'); 
    console.log("Time needed: " + (endFileWrite - startFileWrite) + " ms"); 
    }); 
    }); 

    busboy.on('error', function(err) { 
    console.error(err); 
    res.sendStatus(500, 'ERROR', err); 
    }); 

    busboy.on('finish', function end() { 
    res.sendStatus(200); 
    }); 
    req.pipe(busboy); 
}); 

req.pipe(gfsstream) может быть вопрос здесь, но я не уверен, что предотвращающий файл от сохранения.

ответ

1

Вобще file.pipe(gfsstream) и использовать finish событие вместо close события:

busboy.on('file', function(fieldname, file, filename, encoding, mimetype) { 
    startFileWrite = new Date().getTime(); 
    console.log('File [' + fieldname + ']: filename: ' + filename); 

    gfsstream = gfs.createWriteStream('/uploads'); 
    file.pipe(gfsstream).on('finish', function() { 
    endFileWrite = new Date().getTime(); 
    console.log('File [' + fieldname + '] Finished'); 
    console.log("Time needed: " + (endFileWrite - startFileWrite) + " ms"); 
    }); 
}); 
Смежные вопросы