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

Node server receiving file upload as String: '[object ArrayBuffer]'

本文关键字:object ArrayBuffer String 服务器 文件 节点      更新时间:2023-09-26

我正在尝试上传文件到我的节点服务器。下面是我的客户端代码:

// 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]' ?

form.append()只支持字符串、文件和Blob中的一种值。如果值不是其中之一,则将其转换为字符串(这就是为什么您将.toString()的结果视为file的值)。

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

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