如何将video / webm类型的blob对象从nodejs上传到Mongo DB?

时间:2016-12-30 13:38:23

标签: json node.js mongodb express blob

我必须使用NodeJS将视频blob对象上传到Mongo DB。 对于视频,我使用的是video.js https://github.com/collab-project/videojs-record 我正在使用如下的Ajax调用向NodeJS发送blob对象。

var file={
  name:'abc',
  data: player.recordedData.video
};
$.ajax({
        type: 'POST',
        url: '/uploadVideo',
        data: file,
        dataType: 'JSON'

}).done(function(data) {
                alert("success");
});

这里的文件是我想保存在我的集合中的JSON对象,其中包含文件名,blob数据等其他字段。在Node.js结束时,我有以下代码

router.post('/uploadVideo',function (req, res ,next) {
    var file=req.body;
    console.log("file"+file);
    var collection = db.get('test');
                collection.insert(file, function(err, result){
                console.log('video saved in mongo db');
                    res.send(file);
                });

});

打印文件对象的控制台语句可以正常工作。 但是在mongo DB集合中插入JSON时会出现500错误。

有人能为我提供在集合中插入blob的解决方案吗?如果我的代码有任何错误,请告诉我。 感谢

1 个答案:

答案 0 :(得分:0)

我不确定您使用的是什么中间件?以下是使用multerbody-parser的工作示例。

重要的代码: -

表单数据字段名称(uploadfile)应匹配。然后使用fs从下载的位置读取文件,并将其设置在将插入MongoDB集合的文档中。

upload.single('uploadfile');


insertdata["file"] = fs.readFileSync(req.file.path);

表单数据字段名称: -

File upload: <input type="file" name="uploadfile"><br>

完整的HTML表单: -

<form action="http://localhost:3000/filesave" enctype="multipart/form-data" method="post">
    Username: <input type="text" name="username"><br>
    File upload: <input type="file" name="uploadfile"><br>
    <input type="submit" value="Send">
</form>

工作代码: -

var express = require('express');
var Db = require('mongodb').Db,
    Server = require('mongodb').Server,
    bodyParser = require('body-parser')
    fs = require('fs');

var db = new Db('test', new Server('localhost', 27017));

var multer = require('multer');
var upload = multer({ dest: 'uploads/' });


var collection, dbObj;
module.exports = {

};

var app = express();

app.use(bodyParser.json()); // for parsing application/json
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded

var exports = module.exports;

app.post("/filesave", upload.single('uploadfile'), function (req, res) {
    db.open(function (err, success) {
        if (err) {
            console.log("DB connection error");
        } else {
            console.log("DB connection is successful");
            console.log(req.body.username);
            console.log(req.file);
            var insertdata  ={};
            insertdata["username"] = req.body.username;
            insertdata["file"] = fs.readFileSync(req.file.path);

            db.collection("filesave").insert(insertdata, function (inserr, result) {
                if (inserr) {
                    console.log(inserr);
                    db.close(true);
                    res.json(inserr);
                } else {
                    db.close(true);
                    res.json("Successfully persisted in database");
                }
            });
        }
    })


});

app.listen(3000);

MongoDB集合中保存的数据: -

Binary data saved in Mongo Collection