mongodb - 使用express在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 中,名称应与保存它的视频名称相同。我不知道如何合并此功能的两个代码。谢谢你。
解决方案
多部分请求还支持发送纯数据。只需像这样添加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!!"})
}
})
})
现在棘手的部分是,在客户端上,您应该使用一种表单来发送文件和字段(名称、des 等)。您应该将所有字段放在表单上的文件之前。此外,此表格必须multipart/form-data
用于上传工作。
推荐阅读
- java - Java 8 获取 HashMap 值计数
- python - 是否可以在 python 中修复列表的大小,以便如果列表包含的内容多于它会引发错误
- osgi - OSGI:maven 包装的捆绑包如果尝试访问另一个包装的捆绑包,则会抛出 java.lang.ClassNotFoundException
- mysql - 如何使用 bash 运行带有 `ENCRYPT()` 的 mysql 脚本?
- sql - SQL Unique 分组场景
- jquery - 在按钮 jQuery 上一个接一个地在 3 个或多个类之间切换
- php - 为什么 google recaptcha 没有在我的过程中回调?
- r - 如何导入和使用相关矩阵作为 R 中 PCA 和 PCF 中的唯一数据源
- javascript - 带有可点击横幅旋转器的响应式固定页脚?
- javascript - 如何使整个表格可点击并在点击时添加颜色?