2015-08-07 5 views
8

Po wywołaniu następującego interfejsu API POST powinien on zapisać plik w systemie plików. Jednak plik nie jest zapisywany. Widzę plik w konsoli, ale nie mogę go zapisać/zapisać. Mam następujący kod:Busboy i GridFS nie zapisują pliku w systemie plików

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) może być problemem tutaj, ale nie jestem pewien, co uniemożliwia plik nie były zapisywane.

Odpowiedz

1

Wystarczy zrobić file.pipe(gfsstream) i użyć zdarzenia finish zamiast zdarzenia 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"); 
    }); 
}); 
Powiązane problemy