我必须使用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的解决方案吗?如果我的代码有任何错误,请告诉我。 感谢
答案 0 :(得分:0)
我不确定您使用的是什么中间件?以下是使用multer
和body-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集合中保存的数据: -