2016-11-22 52 views
2

我们想要实现一个功能,通过ajax调用将多个文件上传到ExpressJS服务器并返回其所有唯一的URL。使用强大的节点文件上传不起作用

以下是我的前端代码示例:

var formData = new FormData(); 
for (var i = 0; i < nameId.length; i++) { 
    if($(nameId[i])[0].files[0]){ 
     formData.append(nameId[i], $(nameId[i])[0].files[0], $(nameId[i])[0].files[0].name); 
    } 
} 
$.ajax({ 
    url: '/upload-files', 
    type: 'POST', 
    data: formData, 
    processData: false, 
    contentType: false, 
    success: function(data){ 
     console.log('upload successful!'); 
     console.log(data); 
    } 
}); 

而在我们的路由器,我们下面的代码片断接受请求并存储文件:曾

router.post('/upload-files',function(req, res, next){ 
    var form = new formidable.IncomingForm(); 
    form.multiples = true; 
    form.uploadDir = path.join(__dirname, '/uploads'); 
    form.on('file', function(field, file) { 
     console.log("File incoming"); 
     fs.rename(file.path, path.join(form.uploadDir, file.name)); 
    }); 
    form.on('error', function(err) { 
     console.log('An error has occured: \n' + err); 
    }); 
    form.on('end', function() { 
     res.end('success'); 
    }); 
}); 

但是,没有什么发生在路由器中。请求进入路由器内部,但之后什么都没有。

这里有什么不对吗?在长时间的等待请求失败后,我们没有在服务器端和客户端发生任何错误。

请建议。 感谢

回答

1

我能够加入&更新下面的代码片段来解决它:

在上传请求处理函数添加代码:

form.parse(req); 

而且在更新app.js下面的代码片段于:

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({extended:false})); 

到(要处理multipart

body-parser deprecated undefined extended: provide extended option 
:启动服务器seperatly
数据)

app.use(bodyParser.json()) 
    .use(bodyParser.urlencoded()); 

注:由于解析器的变化以下警告消息来了