【发布时间】:2017-02-07 10:21:55
【问题描述】:
我正在尝试将用户上传的 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 是否使用不当?或者还有其他一些我不明白的事情?为什么 req.body 中没有数据,即使它是一个发布请求。 或者有没有其他方法可以从前端将 csv/文本文件发送到 nodejs 服务器。
这个问题不是重复的,因为 body-parser 即负责解析 req.body 的中间件不处理 text/csv 和 multipart/form-data 。上面的链接不是正确的解决方案。
【问题讨论】:
-
将文件分块并一一发送:stackoverflow.com/questions/20212851/…
-
我觉得你应该看看multer
-
问题不在于大小,为什么我的 nodejs 服务器没有得到任何东西?我做错了什么?
-
@Subhash — 该链接被描述为“用于处理
multipart/form-data的 Node.js 中间件”。既然 OP 发送的是text/cvs数据而不是multipart/form-data,这有什么帮助?
标签: javascript node.js