Каков наилучший способ загрузки нескольких файлов через один вход в nodejs express 4? - PullRequest
0 голосов
/ 28 мая 2018

Я использую nodejs с Express 4. Я пытаюсь загрузить несколько файлов через одно поле ввода.Также я отправляю свою форму через ajax.Я использую промежуточное программное обеспечение для экспресс-загрузки файлов для загрузки файлов.Когда я загружаю несколько файлов, все работает нормально.Но при загрузке одного файла это не работает.html code-

<input type="file" name="attach_file" id="msg_file" multiple />

ajax code-

var data = new FormData();
$.each($('#msg_file')[0].files, function(i, file) {
    data.append('attach_file', file);
});

$.ajax({
    url: '/send_message',
    data: data,
    cache: false,
    contentType: false,
    processData: false,
    method: 'POST',
    type: 'POST',
    success: function(data){
      console.log(data);
    }
});

на стороне сервера js code-

router.post('/send_message', function(req, res, next){
    if (!req.files)
      res.json('No files were uploaded.');

    let sampleFile = req.files.attach_file;
    console.log(sampleFile.length);

    var file_info = [];
    var count = 0;
    sampleFile.forEach(function(ele, key) {
      ele.mv(path.resolve(`./public/upload/${ele.name}`), function(err) {
        if (err){
          console.log(err);
        }else{
          file_info.push(ele.name);
        }
        count++;
        if(sampleFile.length == count){
          res.json({file_name: file_info });
        }
      });
    });
});

если я загружаю один файл console.log(sampleFile.length); показывать неопределенное.

1 Ответ

0 голосов
/ 28 мая 2018

После различного рода испытаний я обнаружил проблему.Все в порядке, кроме случаев, когда я загружаю один файл.Когда ajax отправлял один файл, это был не массив.Вот почему длина не была определена, и forEach не работал.Сначала нужно проверить, затем использовать функцию mv (), например as-

if(sampleFile instanceof Array){
    // here is the forEach block
}else{
    // run a single mv() function
}
...