Вставьте файл с данными формы в mongodb, используя экспресс
Я пытался загрузить файл.mp4 в базу данных mongodb с другой информацией. Я могу сохранить файл, используя multer и gridfs. Код, который я использую для этого:
// Create storage engine
const storage = new GridFsStorage({
url: mongoURI,
file: (req, file) => {
return new Promise((resolve, reject) => {
crypto.randomBytes(16, (err, buf) => {
if (err) {
return reject(err);
}
const filename = buf.toString('hex') + path.extname(file.originalname);
const fileInfo = {
filename: filename,
bucketName: 'vid'
};
resolve(fileInfo);
});
});
}
});
const upload = multer({ storage });
router.post('/upload', upload.single('video'), (req, res) => {
res.json({ file: req.file });
// res.redirect('/');
});
И для загрузки данных файла в БД я делаю это:
//ADD VIDEO
router.post('/addVideo', (req,res) => {
var newVideo = new Video();
newVideo._courseId = req.body.courseId;
newVideo._chapterId = req.body.chapterId;
newVideo.name = req.body.name;
newVideo.des = req.body.des;
newVideo.save((err,note) => {
if(err){
res.status(404).send({err: "Something went wrong"})
} else {
res.status(200).send({err: "Your note has been added!!"})
}
})
})
Обе части работают хорошо, но я должен сделать только один запрос на addVideo. В addVideo имя должно совпадать с именем видео, под которым оно сохраняется. Я не знаю, как объединить оба кода для этой функциональности. Спасибо.
1 ответ
Многокомпонентные запросы также поддерживают отправку простых данных. Просто добавь upload.single('video')
к цепочке промежуточного программного обеспечения, как это:
router.post('/addVideo', upload.single('video'), (req,res) => {
// do something with req.file
var newVideo = new Video();
newVideo._courseId = req.body.courseId;
newVideo._chapterId = req.body.chapterId;
newVideo.name = req.body.name;
newVideo.des = req.body.des;
newVideo.save((err,note) => {
if(err){
res.status(404).send({err: "Something went wrong"})
} else {
res.status(200).send({err: "Your note has been added!!"})
}
})
})
Сложность в том, что на клиенте вы должны использовать одну форму для отправки как файла, так и полей (name, des и т. Д.). Вы должны поместить все поля перед вашим файлом в форме. Также эта форма должна быть multipart/form-data
для загрузки на работу.