Req.files.file.length не определена при загрузке одного файла - PullRequest
0 голосов
/ 12 февраля 2020

Я работаю над загрузкой нескольких файлов с использованием Reactjs / Node.js / Expressjs.

Я могу загрузить несколько файлов в каталог загрузок в моей серверной части и в базу данных.

Но когда я пытаюсь загрузить только один файл, ничего не происходит.

На фронте файл выбран правильно, и когда я console.log(this.state.selectedFile.length) получил 1, он работает.

Но на бэкэнде, когда я использую console.log(myFile.length), я получил неопределенность. Если я загружаю 2 или более файлов, console.log показывает правильную длину, и я не знаю, почему.

Мой код (бэкэнд)

export const uploadFile = (req, res) => {
  const myFile = req.files.file;
  // upload file(s) to directory
  for (let i = 0; i < myFile.length; i++) {
    myFile[i].mv("./src/uploads/" + myFile[i].name, function(err) {
      if (err) {
        return res.status(500).send(err);
      }
    });
    // save file(s) to database
    Upload.create({
      type: myFile[i].mimetype,
      name: myFile[i].name,
      data: myFile[i].data
    });
  }
  console.log(myFile.length);
  res.send("files uploaded !");
};

Если Вы хотите больше кода / объяснений, не стесняйтесь спрашивать.

Ответы [ 2 ]

1 голос
/ 12 февраля 2020
const myFile = (Array.isArray(req.files.file)?req.files.file:[req.files.file]).filter(e=>e);
    // filter is important, so that you have [] instead of [undefined] if req.files.file is undefined

Может быть, дело в том, что один файл может быть объектом, а больше массивом. так что хитрость заключается в том, чтобы пересмотреть не массив для массива

0 голосов
/ 12 февраля 2020

Может быть, если у вас есть только 1 элемент, req.files.file не является массивом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...