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

Node Stream and Process Zipped Contents via FTP

本文关键字:处理 压缩 传输 FTP 节点      更新时间:2023-09-26

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

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

如果您可以将压缩文件更改为gzip文件,这是可能的。据我所知,使用Zip文件是不可能的。如前所述:Java:通过HTTP 流式传输Zipfile的内容

因此,我决定研究使用GZipped文件,使用GZip似乎相当容易。

  • 如何在node.js中逐块gunzip
  • http://nickfishman.com/post/49533681471/nodejs-http-requests-with-gzip-deflate-compression
  • http://codewinds.com/blog/2013-08-20-nodejs-transform-streams.html

如果这只是一个没有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

由于这个例子相当大,我邀请您查看自述

要通过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();

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