节点以指定的块大小读取文件

目标:将大file upload到AWS Glacier,而不将整个文件保留在内存中。

我现在正在使用fs.readFileSync()上传到冰川,而且正在运行。 但是,我需要处理大于4GB的文件,我想同时上传多个块。 这意味着转移到分段上传。 我可以select块大小,但冰河需要每个块大小相同(除了最后一个)

这个线程表明我可以在读取stream上设置一个块大小,但是我并不确定是否能够得到它。

任何有关如何获得一致的部分,而不必将整个文件读入内存并手动拆分的信息?

假设我可以达到这一点,我只是要使用群集,有几个进程将数据stream尽快上传到AWS。 如果这似乎是错误的方式来平行的工作,我会在那里的build议。

如果没有别的,你可以手动使用fs.open()fs.read()fs.close() 。 例:

 var CHUNK_SIZE = 10 * 1024 * 1024, // 10MB buffer = new Buffer(CHUNK_SIZE), filePath = '/tmp/foo'; fs.open(filePath, 'r', function(err, fd) { if (err) throw err; function readNextChunk() { fs.read(fd, buffer, 0, CHUNK_SIZE, null, function(err, nread) { if (err) throw err; if (nread === 0) { // done reading file, do any necessary finalization steps fs.close(fd, function(err) { if (err) throw err; }); return; } var data; if (nread < CHUNK_SIZE) data = buffer.slice(0, nread); else data = buffer; // do something with `data`, then call `readNextChunk();` }); } readNextChunk(); });