【发布时间】:2011-12-06 12:30:32
【问题描述】:
所以我正在做一个上传大量 json 数据的 ajax(jquery) 帖子。发布大数据时,数据通常被分成块。所以我们必须监听发布数据请求并构造一个完整的上传数据缓冲区。像这样的:
req.on('data', function(chunk) {
console.log("upload on data "+ chunk.length);
chunks.push(chunk);
total+= chunk.length;
});
req.on('error', function(e) {
console.log('Got Error ' + e.message);
});
req.on('end', function() {
var buf = new Buffer(total)
cur = 0;
for (var i = 0, l = chunks.length; i < l; i++) {
chunks[i].copy(buf, cur, 0);
cur += chunks[i].length;
}
var level = 1;
var path = "level"+level+".json";
writeToFile(buf,path);
res.send("Update successfull as level "+level);
});
如果我上传带有表单的文件,这似乎有效:
function display_form(req, res) {
res.sendHeader(200, {"Content-Type": "text/html"});
res.write(
'<form action="/upload" method="post" enctype="multipart/form-data">'+
'<input type="file" name="upload-file">'+
'<input type="submit" value="Upload">'+
'</form>'
);
res.close();
}
但我需要上传 json 数据(这是动态的)。我是这样做的:
$.ajax({
type: "POST",
url: "/upload",
data: {"data": JSON.stringify(gamePack)},
success: cb,
});
然后似乎没有回调 req 'data' 或 'end'。那么上传文件与发布数据有何不同呢?
【问题讨论】:
-
您查看过
req.body吗?data和end用于数据流。req.body用于单个数据块