我无法使用 multer 将文件传递到我的 API

问题描述 投票:0回答:1

我正在尝试实现一个为我正在构建的汽车列表项目上传照片的系统。老实说,这是第一次使用 multer,我找不到它有什么问题。在在这里询问之前,我一直在做一些研究并查看教程和文档。在我的 POST 请求中,一切都按计划进行,但 photoArray 部分除外。我还尝试使用 URL.createObject 将文件转换为 URL,但它不起作用。在这两种情况下,无论是否使用 URL,req.files 都是空的。感谢您的任何澄清。 这是我的代码: 1)我的申请书的前面部分

 const submitData = async () => {
    const token = Cookies.get("User");

    if (token) {
      const formData = new FormData();

      // Append form data fields
      formData.append("brand", currentBrand.brand);
      formData.append("model", currentModel);
      //...deleted some appended values for ease of reading
      
      //...i'm trying to pass these photos to multer 
      photoArray.forEach((file) => {
        formData.append(`photos`, file);
      });

      await axios
        .post(
          `http://localhost:3000/api/car/create/${
            jwtDecode(token).findUser._id
          }`,
          formData,
          {
            headers: { "Content-Type": "multipart/form-data" },
          }
        )
        .then((res) => {
          setSubmit(true);
          setTimeout(() => {
            setSubmit(false);
          }, 2000);
        })
        .catch((err) => {
          setError({ state: true, message: err.response.data.message });
          setTimeout(() => {
            setError({ error: false, message: "" });
          }, 2000);
        });
    } else {
      setError({ state: true, message: "Must login first" });
      setTimeout(() => {
        setError({ state: false, message: "" });
      }, 2000);
    }
  };

2)这是我的“Car.js”路由器

const router = Router();

const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, "back/uploads");
  },
  filename: function (req, file, cb) {
    const uniqueSuffix = Date.now() + file.originalname;
    cb(null, file.fieldname + "-" + uniqueSuffix);
  },
});

const upload = multer({ storage: storage });

router.post("/create/:id", upload.any("photos"), createCar);

3)如果需要,这是我的控制器

export const createCar = async (req, res) => {
  try {
    console.log("Files");
    console.log(req.files); // Log uploaded files
    const newCar = new Car(req.body);
    const savedCar = await newCar.save();
    const currentUser = await User.findById(req.params.id);
    if (currentUser) {
      currentUser.data.push(savedCar.id);
      await currentUser.save();
    } else {
      req.status(404).json("User error");
    }
    res.status(200).json(savedCar);
  } catch (error) {
    res.status(400).json(error);
  }
};
reactjs node.js express multer react-fullstack
1个回答
0
投票
upload.any("photos")

您使用的是“照片”键而不是“文件”,因此在控制器中,如果要访问文件数组,则必须使用语法:

req.photos

Hpoe 这很有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.