我正在尝试将用户上传的csv文件从浏览器发送到nodejs服务器进行处理(文件超过50 mb,因此页面变得无响应)。我使用XMLHttpRequest来实现这个目的。我找不到解决方案。非常感谢任何帮助。
Javascript代码
var csv = document.getElementById('inputFile').files[0];
var request = new XMLHttpRequest();
request.open("POST", "/handleFile", true);
request.setRequestHeader("Content-type", "text/csv");
request.onreadystatechange = function() {
if (request.readyState === XMLHttpRequest.DONE && request.status === 200) {
console.log("yey");
}
}
request.send(csv);
NodeJS 服务器
var express = require('express')
var app = express()
var bodyparser = require('body-parser')
app.post('/handleFile', function(req, res) {
console.log(req.body); // getting {} empty object here....
console.log(req);
var csv = req.body;
var lines = csv.split("\n");
var result = [];
var headers = lines[0].split("\t");
for (var i = 1; i < lines.length; i++) {
var obj = {};
var currentline = lines[i].split("\t");
for (var j = 0; j < headers.length; j++) {
obj[headers[j]] = currentline[j];
}
result.push(obj);
}
fileData = result;
});
我做错了什么?是XMLHttpRequest使用不正确吗?还是有其他我没有理解的东西?为什么即使是 post 请求,req.body中也没有数据。或者是否有其他方法从前端将csv/text文件发送到nodejs服务器。
这个问题不是重复的,因为负责解析req.body的中间件body-parser不处理text/csv和multipart/form-data。上面的链接不是正确的解决方案。
multipart/form-data
的Node.js中间件”。由于OP正在发送text/cvs
数据而不是multipart/form-data
,那么它如何有所帮助呢? - Quentin