Как исправить загрузку файлов в React + Node? - PullRequest
0 голосов
/ 25 ноября 2018

Я пытаюсь загрузить файлы на сервер, но получаю сообщение об ошибке 500.

В веб-интерфейсе (React) я использую axios:

class InputFile extends Component {
  constructor(props) {
    super(props);
    this.state = { selectedFile: null };
    this.handleUploadFile = this.handleUploadFile.bind(this);
    this.handleUpload = this.handleUpload.bind(this);
  }

  handleUploadFile(event) {
    this.setState({
      selectedFile: event.target.files[0]
    });
  }

  handleUpload() {
    const data = new FormData();

    data.append('file', this.state.selectedFile, this.state.selectedFile.name);
    axios
        .post('http://127.0.0.1:8000/upload', data)
        .then(res => {
          console.log(res.statusText);
        });
  }

  render() {
    return (
      <div>
        <input name='file' type='file' formEncType='multipart/form-data'
          onChange={this.handleUploadFile} multiple
        />
      </div>
      )
     }
    }

В серверной части (Node) Я пытаюсь сохранить файлыв папке:

app.route('/upload')
    .post((req, res, next) => {
      const uploadFile = req.files.file;
      const fileName = req.files.file.name;

      uploadFile.mv(
          `uploadFiles/${fileName}`,
          (err) => {
            if (err) {
              return res.status(500).send(err);
            }

            res.json({
              file: `uploadFiles/${req.files.file.name}`
            });
          },
        );
    });

Фактически я получаю сообщение об ошибке в консоли:

Uncaught (в обещании) Ошибка: запрос не выполнен с кодом состояния 500

И req.files на бэкэнде равно не определено .Как я могу это исправить?Должна быть возможность загружать один или несколько файлов одновременно

В интерфейсе, который я использую: "axios": "^ 0.18.0",

В интерфейсе, который я использую: "express-fileupload ":" ^ 1.0.0 "

1 Ответ

0 голосов
/ 25 ноября 2018

Проблема была с путь к каталогу на сервере.Я изменил это:

`uploadFiles/${fileName}`,

на полный путь на моем компьютере:

/var/*/uploadFiles/${fileName},

Также я туманно добавить это:

const fileUpload = require('express-fileupload');

app.use(fileUpload());
...