【发布时间】:2022-01-24 08:41:19
【问题描述】:
前言:使用 Node.js w/Express 构建博客网站并使用 multer 将图像上传到 mongoDB。
我遇到了图像数据无法保存到 MongoDB 的问题。
当我在 HTML 表单中使用 enctype="multipart/form-data 时,我在终端中得到以下信息
fieldname: 'myImage',
originalname: 'photo_2021-12-27_20-07-58.jpg',
encoding: '7bit',
mimetype: 'image/jpeg',
destination: './uploads/',
filename: 'photo_2021-12-27_20-07-58.jpg',
path: 'uploads\\photo_2021-12-27_20-07-58.jpg',
size: 134172
}
这是正确的,图像也上传到单独的上传文件夹中,这也是正确的,但是图像数据没有保存到我的 mongoDB。
但是,当我删除 enctype="multipart/form-data" 时,我的终端中没有文件数据,图像也没有上传到单独的文件夹。但是我愿意!在我的 mongoDB 中获取图像数据。这是一个很奇怪的问题。有人可以帮忙吗?
另外,对于我刚刚发布的大量代码,我深表歉意。如果有人真的花时间回答这个问题,那么谢谢!
路线
const express = require('express');
const router = express.Router();
const blogController = require('../controllers/blogController')
const multer = require('multer');
const storage = multer.diskStorage({
//destination for files
destination: function (request, file, callback) {
callback(null, './uploads/');
},
//add back the extension
filename: function (request, file, callback) {
callback(null, file.originalname);
},
});
const upload = multer({
storage: storage,
});
router.get('/create', blogController.blog_create_get);
router.get('/', blogController.blog_home);
router.post('/', upload.single('myImage') ,blogController.blog_create_post);
router.get('/:id', blogController.blog_details);
router.delete('/:id', blogController.blog_delete_post);
module.exports = router
控制器代码
const blog_create_post = (req, res) => {
console.log(req.file);
const blog = new Blog(req.body, {
})
blog.save()
.then(() => {
res.redirect('/blogs')
})
.catch((err) => {
console.log(err);
})
}
架构
image: {
data: Buffer,
contentType: String
},
const Blog = mongoose.model('Blog', blogSchema)
module.exports = Blog;
中间件
// Static Files | Middleware
app.use(express.static('Public'));
app.use(express.urlencoded({ extended: true }));
app.use(morgan('dev'))
app.use('/uploads',express.static('uploads'))
HTML 表单
<form action="/blogs" enctype="multipart/form-data" method="POST">
<label for="image">Select image:</label>
<input type="file" id="image" name="myImage" accept="image/*">
<input type="submit" value = "Upload Photo">
【问题讨论】:
标签: node.js mongodb express multer