代码之家  ›  专栏  ›  技术社区  ›  Mahfuzur Rahman

在Nodejs Express 4中,通过单个输入上载多个文件的最佳方法是什么?

  •  1
  • Mahfuzur Rahman  · 技术社区  · 8 年前

    我用的是4号快车。我正在尝试通过一个输入字段上载多个文件。另外,我通过Ajax提交我的表单。 我正在使用快速文件上传中间件上传文件。当我上传多个文件时,它可以正常工作。但是当上传一个文件时,它不起作用。 HTML代码-

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

    Ajax代码-

    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代码-

    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 回复  |  直到 8 年前
        1
  •  2
  •   Mahfuzur Rahman    8 年前

    经过不同的测试,我发现了这个问题。除了我上传一个文件外,一切正常。 当Ajax发送单个文件时,它不是一个数组。这就是为什么,长度没有定义,foreach没有运行。需要先检查,然后使用mv()函数,如-

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