使用强大功能无法上传节点文件

时间:2016-11-22 13:56:58

标签: node.js express file-upload formidable

我们希望通过ajax调用实现将多个文件上传到ExpressJS服务器并返回其所有唯一网址的功能。

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

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');
    });
});

但是,路由器中什么都没发生过。请求即将进入路由器,但之后没有。

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

请建议。 感谢

2 个答案:

答案 0 :(得分:1)

我能够通过添加&amp;来解决它更新以下代码段:

在上传请求处理功能中添加了代码:

form.parse(req);

在app.js中更新了以下代码片段:

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

to(单独处理 multipart 数据)

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

注意由于启动服务器时出现以下警告消息的解析器更改:

body-parser deprecated undefined extended: provide extended option

答案 1 :(得分:0)

我的问题通过更改如下的ajax发送代码得以解决:-

     $.ajax({
            url: '/postroute',
            type: 'POST',
            processData: false,
            contentType: false,
            cache: false,
            data: formData,
            enctype: 'multipart/form-data',
            success: function(){
                console.log('Uploaded sucessfully');
            }
        });