Отправка изображения на серверную часть с помощью multar post и axios

#javascript #node.js #reactjs #axios #multer

#javascript #node.js #reactjs #axios #мультер

Вопрос:

Основная проблема заключается в том, что когда я загружаю данные, после создания полезной нагрузки в Axios. Загружается только основная часть. Часть изображения не загружается.

 submit = (event) => {
event.preventDefault();

const payload = {
  img: this.state.img,
  body: this.state.body,
};
axios({
  url: "/api/save",
  method: "POST",
  data: payload,
})
  .then((response) => {
    console.log("data has been sent to the server RESPONSE: ", response);
    this.resetUserInput();
    this.getBlogPost();
  })
  .catch((err) => {
    console.log("Data is not posted: and payload is :", payload);
  });
 

Это код для моей кнопки отправки. И это вызывается в multer, и там я пытаюсь загрузить изображение. Здесь полезная нагрузка показывает изображение при выполнении console.log(), но после передачи в axios и multer получаемый нами ответ не имеет img. img — это просто пустой объект в ответе.

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

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

router.post("/save", upload.single("img"), (req, res) => {
  const data = {
    body: req.body.body,
    img: {
      data: req.file,
      contentType: "image/png",
    },
  };

  const newBlogPost = new BlogPost(data);
  console.log(newBlogPost);
  newBlogPost.save((err, val) => {
    if (err) {
      res.status(500).json({ msg: "Sorry, The data couldn't be saved" });
      console.log("Reached the save errors!");
      return;
    }
    // console.log("printing the req here: ", req);
    res.json(val);
  });
});
 

Здесь также, когда я утешаю.войдите в newBlogPost, изображения нет. запрос.файл должен содержать img, но он не определен. Я также пробовал использовать from-data, но не сработало.

Здесь есть кто-нибудь, кто может помочь!

Ответ №1:

Вы не можете просто поместить файл в тело. Вам нужно использовать form-data с axios:

 const data = new FormData();
data.append("img", fileInput.files[0], "filepath.jpg");
 

Также вы можете добавить другие данные в FormData.
Обратитесь к этому URL-адресу,
https://developer.mozilla.org/en-US/docs/Web/API/FormData/append