将一个大文件附加到nodejs中的另一个大文件
Append one large file to other large file in nodejs
我正在使用电子框架 (atom shell) 开发一个应用程序,我是 NodeJS 的新手。这通过在 http get 请求中指定字节范围将一个大文件下载为两个(或更多)部分(每个 >2GB)。完成后我想合并这两个文件。到目前为止,我已经能够想到一种解决方案,即打开两个文件并使用 fs.appendFile 将第二个文件的块附加到第一个文件。在我看来,这将是一个非常缓慢的过程,并且还会阻止 nodejs。有没有其他有效的方法。我也愿意生成一个子进程并使用其他应用程序。
您可以在 node.js 中使用流将一个文件附加到另一个文件:
var fs = require('fs');
// open destination file for appending
var w = fs.createWriteStream("output.txt", {flags: 'a'});
// open source file for reading
var r = fs.createReadStream("input.txt");
w.on('close', function() {
console.log("done writing");
});
r.pipe(w);
这将缓冲文件、分块读取、分块写入、关闭两个文件,一切都为您完成。
而且,这一切都是通过异步文件 I/O 完成的,因此它将允许其他 node.js 活动交错(例如不会阻塞 node.js)。
我正在使用电子框架 (atom shell) 开发一个应用程序,我是 NodeJS 的新手。这通过在 http get 请求中指定字节范围将一个大文件下载为两个(或更多)部分(每个 >2GB)。完成后我想合并这两个文件。到目前为止,我已经能够想到一种解决方案,即打开两个文件并使用 fs.appendFile 将第二个文件的块附加到第一个文件。在我看来,这将是一个非常缓慢的过程,并且还会阻止 nodejs。有没有其他有效的方法。我也愿意生成一个子进程并使用其他应用程序。
您可以在 node.js 中使用流将一个文件附加到另一个文件:
var fs = require('fs');
// open destination file for appending
var w = fs.createWriteStream("output.txt", {flags: 'a'});
// open source file for reading
var r = fs.createReadStream("input.txt");
w.on('close', function() {
console.log("done writing");
});
r.pipe(w);
这将缓冲文件、分块读取、分块写入、关闭两个文件,一切都为您完成。
而且,这一切都是通过异步文件 I/O 完成的,因此它将允许其他 node.js 活动交错(例如不会阻塞 node.js)。