通过FTP节点流和处理压缩内容

时间:2016-05-11 22:08:30

标签: javascript node.js ftp

我的服务器10gb +上有一个大的压缩文件 我无法将压缩文件保存在本地计算机上。 我想将压缩内容流式传输到我的服务器上(通过FTP),按块解压缩内容块,并处理每个块/行。

基本上我的挑战和问题是: 我可以使用压缩文件的每个流块并单独解压缩吗?或者我必须下载整个文件?是否有一个处理此问题的节点库?

2 个答案:

答案 0 :(得分:2)

如果您可以将压缩文件更改为gzip压缩文件,则可以。从我读到的内容来看,Zip文件无法实现。如上所述:Java: Stream Contents of Zipfile via HTTP

所以我决定考虑使用GZip文件,使用GZip看起来相当容易。

答案 1 :(得分:2)

如果它只是一个没有zip字典的压缩文件,也许你可以试试这个

  fs.createReadStream(`${craneProjectDir}/tree`)
  .pipe(zlib.createUnzip())
  .pipe(fs.createWriteStream('myfile'))

https://nodejs.org/api/zlib.html#zlib_zlib_createunzip_options

如果它有一个字典,对于压缩文件是常规的,你可以尝试这个

https://github.com/antelle/node-stream-zip

由于示例非常大,我邀请您查看readme

要通过FTP读/写文件,我邀请您使用优秀的mscdex

中的库

https://github.com/mscdex/node-ftp

  var Client = require('ftp');
  var fs = require('fs');

  var c = new Client();
  c.on('ready', function() {
    c.get('foo.txt', function(err, stream) {
      if (err) throw err;
      stream.once('close', function() { c.end(); });
      stream.pipe(fs.createWriteStream('foo.local-copy.txt'));
    });
  });
  // connect to localhost:21 as anonymous
  c.connect();

所以是的,这应该是可行的。