【发布时间】:2021-07-29 22:18:42
【问题描述】:
我正在尝试使用 multer 和 Express Router 实现文件上传功能。我使用 router.use 定义了一个端点/batch_upload,如下所示
api.js
router.use(
"/batch_upload",
upload.single("emp_csv_data"),
userController.processBatchUserInformation
);
在 userController.js
中exports.processBatchUserInformation = async (req, res) => {
console.log(req.file);
if (req.method == "POST") {
try {
console.log("Upload route reached - POST");
console.log(req.file);
console.log(req.file.path);
return res.send(req.file);
} catch (err) {
console.log("Error Occurred");
return res.send(err);
}
}
};
在 FileUploader.js 中,我定义了上传变量和 multer 选项,如下所示
var multer = require("multer");
var storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, "uploads");
},
filename: (req, file, cb) => {
return cb(null, file.fieldname + "-" + Date.now());
}
});
exports.upload = multer({ storage: storage });
最后,在 app.js 中,我使用了路由
app.use('/user',user_routes)
但是当我向http://localhost:5000/user/batch_upload 发送文件时,我收到req.file 的未定义响应
具有讽刺意味的是,我在示例测试项目中有确切的实现,并且一切似乎都很好。我不明白我错过了什么。如果您发现有问题,请帮我解决。
【问题讨论】:
-
为了帮助将事情放在上下文中,您能否粘贴将对该端点的请求放在一起的代码?
-
对不起,我不明白您所说的“请求”代码是什么意思。端点由 router.use 创建,提到了 multer 选项以及控制器方法。请求对象将是一个带有文件的简单表单数据。
-
好的。您实际上如何向localhost:5000/user/batch_upload 发送请求?这是通过提交纯 html 表单来完成的吗?还是使用 javascript 库以编程方式处理?您能否将这些信息粘贴到您的帖子中,也许会有所帮助。
-
我正在使用 Postman。我将用屏幕截图更新帖子。请看一下。
-
日志中有什么?文件夹
uploads是否存在且您有权在此文件夹中写入?
标签: javascript node.js express multer express-router