我正在尝试使用XMLHttpRequest进行文件上传,我正在拆分文件,chunk_size是10KB。 在服务器上我正在使用
app.route('/upload/').put(function(req, res, next) {
var buff =req._readableState.buffer[0];
console.log('Buffer length: ' + buff.length);
}
console.log:"缓冲区长度:10240"
我正在写文件:
fs.write(fd,buff,0,buff.length,pos,function(){}
我没有使用busboy,multer或body-parser 一切都像魅力一样。
然后我将chunk_size更改为100KB,客户端发送100KB,我检查了Content-Length。
但服务器正在接收31972字节,有时接收64061字节。
console.log:"缓冲区长度:31972"
不知道发生了什么,任何帮助都会受到赞赏。
答案 0 :(得分:2)
作为_readableState
提示的主要下划线,这不是外部API,也不建议使用。以下是the docs on streams的摘录:
可写和可读流都将缓冲内部对象上的数据,内部对象可以分别从_writableState.getBuffer()或_readableState.buffer中检索。
...
流的目的,特别是使用stream.pipe()方法,是将数据缓冲限制在可接受的水平,以便不同速度的源和目标不会压倒可用内存。
因此,在这种情况下发生的事情是,一些数据被放入流中的内部队列中,等待消费。
可读流应该与stream.read()
一起使用并监听data
事件,或者,在这种情况下应该是最简单的方法,使用pipe
方法,如下所示:
req.pipe(fs.createWriteStream("some/path"));
答案 1 :(得分:0)