【问题标题】:Node server receiving file upload as String: '[object ArrayBuffer]'节点服务器以字符串形式接收文件上传:'[object ArrayBuffer]'
【发布时间】:2015-05-22 20:23:58
【问题描述】:

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

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

【问题讨论】:

    标签: javascript jquery node.js express


    【解决方案1】:

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

    【讨论】:

    • 我取出了 FileReader 并刚刚发送了 File 对象 - 似乎工作得很好。谢谢,今天真是痛苦。 :)
    猜你喜欢
    • 2017-11-15
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 2013-02-09
    • 2016-03-12
    相关资源
    最近更新 更多