我试图将文件上传到我的节点服务器。这是我的客户端代码:
// 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]'
?
答案 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);
})