【问题标题】:Node file uploading using formidable not working使用强大的节点文件上传不起作用
【发布时间】:2016-11-22 13:56:58
【问题描述】:

我们希望实现一个功能,通过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);
    }
});

在我们的路由器中,我们有以下代码 sn-p 来接受请求并存储文件:

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

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

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

请提出建议。 谢谢

【问题讨论】:

    标签: node.js express file-upload formidable


    【解决方案1】:

    我能够通过添加和更新以下代码 sn-ps 来解决它:

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

    form.parse(req);
    

    并在 app.js 中更新以下代码 sn-p 为:

    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
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2011-10-10
        • 1970-01-01
        • 2016-08-18
        • 2011-12-13
        • 1970-01-01
        • 1970-01-01
        • 2016-12-20
        • 1970-01-01
        相关资源
        最近更新 更多