javascript - 替换上传文件时,使用 multer 在 Node js 中获取文件名 undefine
问题描述
我想在这里更新我的上传图像文件。当我上传文件时,文件名显示为“http://localhost:3200/images/undefined”并且文件也没有上传。但是 createNewPost 函数在上传图像时可以正常工作。我正在使用 sequelize 方法来创建更新函数。
//!----------new post-----------------------------//
exports.createNewPost = (req, res, next) => {
//req.body.post = JSON.parse(req.body.post);
//todo - this what i mean, cz logged.--//
console.log(req.file);
const url = req.protocol + "://" + req.get("host");
const post = {
title: req.body.title,
content: req.body.content,
userId: req.userdata.userId,
imageUrl: url + "/images/" + req.file.filename,
// take from token, here hardcoded
};
Post.create(post)
.then((resulter) => {
res.status(200).json({
message: "New Post Created",
post: resulter,
});
})
.catch((err) => {
res.status(500).json({
message: "post not saved",
error: err,
});
});
};
这是更新功能。
exports.updatePost = (req, res, next) => {
const id = req.params.id;
const url = req.protocol + "://" + req.get("host");
let updatedPost = {
title: req.body.title,
content: req.body.content,
imageUrl: url + "/images/" + req.file.filename,
};
const userId = req.userdata.userId;
Post.update(updatedPost, { where: { id: id, userId: userId } })
.then((resulter) => {
res.status(200).json({
result: resulter,
message: "Post Updated",
post: updatedPost,
id:updatedPost.imageUrl,
});
})
.catch((error) => {
res.status(500).json({
message: "Not Working",
error: error,
});
});
};
多配置
const MIME_TYPES = {
"image/jpeg": "jpg",
"image/png": "png",
"image/jpg": "jpg",
};
const storage = multer.diskStorage({
destination: (req, file, callback) => {
callback(null, "images");
},
filename: (req, file, callback) => {
const extension = MIME_TYPES[file.mimetype];
callback(null, Date.now() + "." + extension);
console.log(filename);
},
});
module.exports = multer({ storage: storage }).single("image");
解决方案
推荐阅读
- graph - 流氓图的支配树
- directx - DX11 三角形列表根本不渲染
- flutter - Flutter TextButton splashColor 属性
- file - 在 Go 中读取/写入文件的正确方法
- angular - 对 ngx-formly 自定义模板进行单元测试
- c++ - 在 libstdc++.so 中缺少 GLIBCXX 的 Alpine Linux 库
- c++ - 无法打开包含文件:'stddef.h':在 cstddef QtCreator 中没有这样的文件或目录
- java - 将数据库字段的值与字符串进行比较
- azure-active-directory - 通过 SSO (SAML) 为来自 Internet 的任何用户(不仅仅是公司用户)登录
- python - python 3.8 或 3.8+ 中函数的一般签名是什么?