我想使用multer将图像上传到mongodb。这是我的代码:
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, "./uploads");
},
filename: function (req, file, cb) {
cb(
null,
file.fieldname + "-" + Date.now() + path.extname(file.originalname)
);
},
});
const upload = multer({
storage: storage,
});
内部mongoClient:
client.connect((err) => {
const adminTasks = client
.db(`${process.env.DB_NAME}`)
.collection("adminTasks");
app.post("/uploadImage", upload.single("myImage"), (req, res) => {
const img = fs.readFileSync(req.file.path);
const encode_image = img.toString(base64);
// defining json obj for image
const final_image = {
contentType: req.file.mimetype,
path: req.file.path,
image: new Buffer(encode_image, "base64"),
};
// inserting image to db
userTasks.insertOne(final_image, (err, result) => {
console.log(result);
if (err) {
console.log(err);
}
console.log("saved to db");
res.contentType(final_image.contentType);
res.send(final_image.image);
});
});
});
,错误是:
TypeError: Cannot read property 'path' of undefined
我已经阅读了许多有关由于enctype =“ multipart / form-data”而出现问题的问题。但是我用了这个:
<form action="http://localhost:5000/uploadImage" method="POST">
<input type="file" enctype="multipart/form-data" name="myImage" />
<input type="submit" value="upload Image" />
</form>
如何解决此问题??
答案 0 :(得分:0)
对于upload.single()
,文件名位于req.file
中。这是代表文件名的字符串。没有属性req.file.path
。因此,您应该使用req.file
来获取文件名。
答案 1 :(得分:0)
file.fieldname可能未定义。这就是为什么完整路径变得不确定的原因。
相反,请尝试在req.file中查找名称。这是对我有用的东西:
filename: (req, file, cb) => {
cb(null, file.originalname)
}
文档以一般方式错误地指出了存储配置应包含的内容
filename: (req, file, cb) => {
cb(null, file.fieldname)
}