代码之家  ›  专栏  ›  技术社区  ›  Dipak

节点文件上传使用强大不工作

  •  3
  • Dipak  · 技术社区  · 8 年前

    我们希望实现一个功能,将多个文件上传到ExpressJS服务器,并通过 ajax 呼叫

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

    我通过添加&正在更新以下代码段:

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

    form.parse(req);
    

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

    multipart 数据单独)

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

    注意:由于解析器的变化,启动服务器时会出现以下警告消息:

    body-parser deprecated undefined extended: provide extended option
    
        2
  •  0
  •   harbrinder_singh    4 年前

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

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