Вставьте файл с данными формы в mongodb, используя экспресс - PullRequest
0 голосов
/ 24 декабря 2018

Я пытался загрузить файл .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 Ответ

0 голосов
/ 24 декабря 2018

Многочастные запросы также поддерживают отправку простых данных.Просто добавьте 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 для загрузки на работу.

...