使用gridfs将上传文件及其元数据存储在Node / Express中

时间:2016-07-17 05:58:10

标签: node.js mongodb express mongoose gridfs

我知道有一些关于此的线索,但我找不到我的答案。所以使用post我已设法将此文件对象提供给服务器端

{ fileToUpload:
{ name: 'resume.pdf',
 data: <Buffer 25 50 44 46 2d 31 2e 33 0a 25 c4 e5 f2 e5 eb a7 f3 a0 d0 c4 c6 0a 34 20 30 20 6f 62 6a 0a 3c 3c 20 2f 4c 65 6e 67 74 68 20 35 20 30 20 52 20 2f 46 69 ... >,
 encoding: '7bit',
 mimetype: 'application/pdf',
 mv: [Function] } }

如何使用mongoose&amp ;;将元数与元数据一起保存? GridFS的?到目前为止我看过的大多数线程中都使用了gridfs-stream给定了文件的临时路径,这是我没有的。有人可以通过流式传输数据及其元数据帮助我保存这个文件+给出一个如何检索它的例子&amp;把它发回客户端?

1 个答案:

答案 0 :(得分:0)

我一定很累,我使用express-fileupload作为中间件,但没有用它来保存文件,这是用对象中的mv函数完成的。使用下面的代码在本地保存文件,然后使用gridfs-stream

将其流式传输到mongo
var file = req.files.fileToUpload;
file.mv('./uploads/'+file.name, function(err) {
    if (err) {
        res.send(err, 500);
    }
    else {
        res.send('File uploaded!');
        var gfs = Grid(conn.db);

        // streaming to gridfs
        //filename to store in mongodb
        var writestream = gfs.createWriteStream({
            filename: file.name
        });
        fs.createReadStream('./uploads/'+file.name).pipe(writestream);

        writestream.on('close', function (file) {
            // do something with `file`
            console.log(file.filename + ' Written To DB');
        });
    }
});