使用Nodejs自定义流写入长度

时间:2014-08-13 01:09:59

标签: javascript node.js performance file-upload stream

这可能已在网站的某个地方得到解答,但如果是,我找不到它。我也找不到基于任何官方Node.js文档的问题的确切答案(或者至少无法理解如何实现解决方案)。

问题:是否可以自定义将可读流的输入传输到文件时发生的每个磁盘写入的长度(以字节为单位)?

我将上传大文件(~50Gb),并且可能会有许多客户同时这样做。为了实现这一点,我将在客户端切片文件,然后一次上传一个块。理想情况下,我希望在服务器端对磁盘的物理写入以1Mb部分发生 - 但这可能吗?如果有可能,那么如何实施呢?

1 个答案:

答案 0 :(得分:0)

你可能会use a WriteStream。虽然fs api中没有记录,但任何Writable确实需要highWaterMark选项才能刷新其缓冲区。另请参阅details on buffering

所以它只是

var writeToDisk = fs.createWriteStream(path, {highWaterMark: 1024*1024});
req.pipe(writeToDisk);

免责声明:我不相信货物崇拜"服务器友好"块大小。我使用默认值(16kb),当性能成为问题 test 其他尺寸时,找到当前设置的最佳值。