【发布时间】:2021-04-07 16:09:33
【问题描述】:
我使用 multer 包和节点并做出反应,我将文件发送到节点 js 后端,但始终未定义.. 这是反应
<div className="file-field input-field">
<div className="btn">
<span>File</span>
<input
type="file"
name="image"
id="image"
onChange={changedImageUpload}
/>
</div>
<div className="file-path-wrapper">
<input className="file-path validate" />
</div>
</div>
那是那里的 onChange 文件处理方法,我只得到第一个 console.log 但第二个和第三个没有打印
const changedImageUpload = (e) => {
const file = e.target.files[0];
const formData = new FormData();
formData.append("image", file);
console.log(formData, file);
try {
const config = {
Headers: {
"Content-Type": "multipart/form-data",
},
};
axios
.post("/uploads", formData, config)
.then((res) => {
console.log(res.data);
})
.catch((err) => {
console.log(err);
});
} catch (err) {
console.log(err);
}
};
及其节点代码和多重配置
import express from "express";
import multer from "multer";
const route = express.Router();
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, "images");
},
filename: (req, file, cb) => {
cb(
null,
new Date().toISOString().replace(/[\/\\:]/g, "_") + file.originalname
);
},
});
const multerFilter = (req, file, cb) => {
if (
file.mimetype === "image/png" ||
file.mimetype === "image/jpg" ||
file.mimetype === "image/jpeg"
) {
cb(null, true);
} else {
cb(null, false);
}
};
const upload = multer({ storage: storage, fileFilter: multerFilter });
route.post("/uploads", upload.single("image"), (req, res) => {
try {
// res.send(`/${req.file.path}`);
console.log(req.file);
} catch (err) {
console.log(err);
}
});
并导入app.js
import uploadRoutes from "./Routes/uploadRoutes.js";
app.use(uploadRoutes);
const __dirname = path.resolve();
app.use("/images", express.static(path.join(__dirname, "/images")));
所以在打印 formData 时我总是得到空对象,如果我打印 req.file 我在节点 js 中得到一个未定义的对象
【问题讨论】:
-
您能分享一下您是如何处理输入 onChange 事件的吗?使用邮递员发送请求有效吗?
-
哦,对不起,我忘了分享这个.. 现在我要添加那个
-
你用 Postman 测试过你的 NodeJS 服务器吗?它可以让您知道错误的来源是前端还是后端部分
-
是的,兄弟我总是不确定
标签: javascript node.js reactjs express multer