【问题标题】:cant get files using multer in node js (req.file is undefined)无法在节点 js 中使用 multer 获取文件(req.file 未定义)
【发布时间】: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


【解决方案1】:

您的过滤功能错误。您将mimeTypejpg 之类的东西进行比较,而MIME type 不是真正的MIME type,因此您的文件总是被过滤掉。

您需要与image/pngimage/jpeg 进行比较。

【讨论】:

  • 是的,你说得对,兄弟,这是一个错误,但我修复了它,但它再次无法正常工作
猜你喜欢
  • 2020-11-08
  • 1970-01-01
  • 2018-08-04
  • 1970-01-01
  • 2018-08-06
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
  • 2022-01-18
相关资源
最近更新 更多