2016-02-20 24 views
1

我想用XMLHttpRequest做文件上傳,我正在分割文件,chunk_size是10KB。 在服務器上,我使用上傳文件Node.js快速放置方法

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(){} 

我不使用打雜,multer或身體解析器 和一切工作就像一個魅力。

然後我改變chunk_size爲100KB,客戶端發送100KB,我檢查了Content-Length。

但服務器正在接收31972字節,有時64061字節。

的console.log: 「緩衝區長度:31972」

不知道發生了什麼事,任何幫助,將不勝感激。

回答

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