Загрузка изображений в стек MERN

#node.js #reactjs #mongodb #express #axios

#node.js #reactjs #mongodb #экспресс #axios

Вопрос:

Мое приложение react и node находятся в разных каталогах, я хочу загрузить изображение в react, отправить его на серверную часть через запрос axios, а в node получить это изображение, затем переименовать его в текущую дату и время и, наконец, сохранить его в текущем каталоге серверной части, если изображение сохранено успешно, затем верните егово внешний интерфейс через серверную часть узла и отображение изображения в react.

Это то, что я пытался достичь своей желаемой цели.

Форма

 <div className="form-group">
                <label htmlFor="exampleFormControlFile1">
                  Example file input
                </label>
                <input
                  type="file"
                  className="form-control-file"
                  id="exampleFormControlFile1"
                  onChange={this.fileSelectedhandler}
                />
              <button onClick = {this.onSubmit}> Upload</button> 
 </div>
  

Вызов функции со стрелкой при нажатии на отправить

 onSubmit = async (e) => {
    e.preventDefault();
    const formData = new FormData();
    formData.append("file", this.state.file);

    try {
      const res = await axios.post("/upload", formData, {
        headers: {
          "Content-Type": "multipart/form-data",
        },
      });

     const { fileName, filePath, file } = res.data;

      //setUploadedFile({ fileName, filePath });

      //setMessage('File Uploaded');
      console.log(fileName, filePath, file);
      this.setState({ imagesHello : res.data});
      
    } catch (err) {
      if (err.response.status === 500) {
      
        console.log("There was a problem with the server");
      }
    }
  };
  

Серверный API

 //route for uploading image(optional)
app.post("/upload", (req, res) => {
  if (req.files === null) {
    return res.status(200).json({ msg: "No File Uploaded" });
  }

  const file = req.files.file;
  let ts = Date.now();

  let date_ob = new Date(ts);
  let date = date_ob.getDate();
  let month = date_ob.getMonth()   1;
  let year = date_ob.getFullYear();

  // prints date amp; time in YYYY-MM-DD format
  const newFile = `${year}   "-"   ${month}   "-"   ${date}`;

  file.mv(`${__dirname}/uploads/${file.name}`, (err) => {
    if (err) {
      console.log(err);
    } else {
      res.json({
        fileName: file.name,
        filePath: `/uploads/${file.name}`,
        file: req.files.file,
      });
    }
  });
});
  

Проблема с этим кодом заключается в том, что файл сохраняется во внутреннем каталоге, но не возвращается во внешний интерфейс. теперь я хочу отправить это сохраненное изображение обратно во внешний интерфейс react и отобразить его в ответ на приведенный выше /upload запрос post.

Любая помощь будет очень признательна.

Комментарии:

1. С какой конкретной проблемой или проблемой вы столкнулись? Пожалуйста, обновите вопрос, чтобы отразить это.

2. я обновил свой вопрос

Ответ №1:

Если вы хотите получить сообщение на интерфейсе, что данные успешно сохранены…. вы можете вернуть некоторый ответ из серверной части, и во время выборки, получая ответ без ошибок, вы можете поджарить сообщение (Materializecss Toast)

  M.toast({html:"uploaded", classes:"#6a1b9a purple"})