【发布时间】:2022-10-07 20:14:18
【问题描述】:
我想为多个字段(如 html_template 和 preview_image 字段)上传文件,但 Node.js 不接受它,而且它不会在控制台中记录任何错误,但在邮递员中它会响应内部服务器错误。
多用途函数:
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, "src/uploads/");
},
filename: function (req, file, cb) {
cb(
null,
file.fieldname + "-" + Date.now() + path.extname(file.originalname)
);
},
});
var upload = multer({
storage: storage,
fileFilter: function (req, file, cb) {
var filetypes = /jpeg|jpg|png|pdf|txt/;
var mimetype = filetypes.test(file.mimetype);
var extname = filetypes.test(path.extname(file.originalname).toLowerCase());
if (mimetype && extname) {
return cb(null, true);
}
cb("Please upload valid file");
},
});
创建模板路由:
router
.route("/create")
.post(
upload.fields([{ name: "html_template" }, { name: "preview_image" }]),
Template.createTemplate
);
如果我从路由中删除字段{ name: "html_template" },那么它可以正常工作,但它不适用于该字段html_template
templateCreator 控制器功能:
exports.createTemplate = catchAsync(async (req, res) => {
try {
console.log(req.files);
const template = await templateService.createTemplate(req);
return res.succeed(template, "Template created successfully");
} catch (error) {
console.trace(error);
return res.failed(500, "Internal Server Error", error);
}
});
服务功能:
exports.createTemplate = async (req) => {
const name = req.body.name;
const html_template = req.files.html_template;
const preview_image = req.files.preview_image;
const imagePath = preview_image.map((image) => image.path);
const template = new Template({
name,
html_template,
preview_image: imagePath.toString(),
});
await template.save();
return template;
};
我尝试过upload.fields 和upload.any,但它不起作用。我无法弄清楚为什么。
如果我发送 jpg、jpeg、png 文件,那么它会接受并将其保存到数据库中,但不会保存到 .txt 文件中。这是为什么?
【问题讨论】:
标签: node.js file file-upload multer