上传文件Node.js Express put方法

时间:2016-02-20 09:02:28

标签: javascript node.js express file-upload

我正在尝试使用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"

不知道发生了什么,任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:2)

作为_readableState提示的主要下划线,这不是外部API,也不建议使用。以下是the docs on streams的摘录:

  

可写和可读流都将缓冲内部对象上的数据,内部对象可以分别从_writableState.getBuffer()或_readableState.buffer中检索。

     

...

     

流的目的,特别是使用stream.pipe()方法,是将数据缓冲限制在可接受的水平,以便不同速度的源和目标不会压倒可用内存。

因此,在这种情况下发生的事情是,一些数据被放入流中的内部队列中,等待消费。

可读流应该与stream.read()一起使用并监听data事件,或者,在这种情况下应该是最简单的方法,使用pipe方法,如下所示:

req.pipe(fs.createWriteStream("some/path"));

请参阅docs on createWriteStream

答案 1 :(得分:0)

以这种方式分割文件并不总是实用和有效。

您可以尝试名为 files-io 的节点包。 https://www.npmjs.com/package/files-io

希望这个服务器成为您的目的。