kjs*_*js3 7 upload node.js amazon-glacier
目标:将大文件上传到AWS Glacier,而不将整个文件保存在内存中.
我现在正在使用fs.readFileSync()上传到冰川,事情正在发挥作用.但是,我需要处理大于4GB的文件,我想并行上传多个块.这意味着转向分段上传.我可以选择块大小但是冰川需要每个块大小相同(除了最后一个)
这个帖子表明我可以在读取流上设置块大小,但实际上我并不能保证得到它.
有关如何在不将整个文件读入内存并手动拆分的情况下获取一致部件的任何信息?
假设我可以达到这一点,我只是使用集群,其中有几个进程可以像上传到AWS一样快速地关闭流.如果这似乎是错误的工作并行化的方式,我会喜欢那里的建议.
msc*_*dex 14
如果没有别的你可以使用fs.open()
,fs.read()
和fs.close()
手动.例:
var CHUNK_SIZE = 10 * 1024 * 1024, // 10MB
buffer = Buffer.alloc(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();
});
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以考虑使用以下代码段,我们以 1024 字节的块读取文件
var fs = require('fs');
var data = '';
var readStream = fs.createReadStream('/tmp/foo.txt',{ highWaterMark: 1 * 1024, encoding: 'utf8' });
readStream.on('data', function(chunk) {
data += chunk;
console.log('chunk Data : ')
console.log(chunk);// your processing chunk logic will go here
}).on('end', function() {
console.log('###################');
console.log(data);
// here you see all data processed at end of file
});
Run Code Online (Sandbox Code Playgroud)
请注意:highWaterMark 是用于块大小的参数希望这有帮助!
网络参考:https : //stackabuse.com/read-files-with-node-js/ 更改读取流块大小
归档时间: |
|
查看次数: |
8534 次 |
最近记录: |