节点服务器接收文件上传为String:' [object ArrayBuffer]'

时间:2015-05-22 20:23:58

标签: javascript jquery node.js express

我试图将文件上传到我的节点服务器。这是我的客户端代码:

// data is {_id: 'somebigstring', file: an ArrayBuffer}

api.addDocument = function (data, cb){
    // $.post(BASE_PATH + '/requests/addDocument', data, cb);
    var formData = new FormData();

    _.keys(data).forEach(key => {
        formData.append(key, data[key]);
    })

    $.ajax({
        type: 'POST',
        url: BASE_PATH + '/requests/addDocument',
        data: formData,
        processData: false,
        contentType: false
    }).done(cb);
}

这就是我在服务器端做的事情(在Node和Express中):

app.use(multer({dest:'./uploads/'}));
app.use(function (req, res, next){
    debugger;
    next();
});

debugger行,我查看req.body并获取此信息:

{ _id: '555bcc06798e6f9c69b461e0',
  file: '[object ArrayBuffer]' }

如何获取实际文件,而不是'[object ArrayBuffer]'

1 个答案:

答案 0 :(得分:3)

form.append()仅支持以下值之一:string,File或Blob。如果该值不是其中之一,则会将其转换为字符串(这就是为什么您将.toString()的结果视为file的值的原因。)

所以一个解决方案可能是:

_.keys(data).forEach(key => {
  var val = data[key];
  if (val instanceof ArrayBuffer)
    val = new Blob([val]);
  formData.append(key, val);
})