节点:将字符串作为文件添加到 tar 存档中(没有临时文件)

Posted

技术标签:

【中文标题】节点:将字符串作为文件添加到 tar 存档中(没有临时文件)【英文标题】:Node: adding a string as a file into a tar archive (without temporary files) 【发布时间】:2014-03-10 22:40:12 【问题描述】:

我想在 node.js 中创建一个 tar 存档。 canonical tar archiving example 是基于文件流的:

fstream
  .Reader(path: 'src', type: "Directory")
  .pipe(tar.Pack())
  .pipe(zlib.createGzip())
  .pipe(fstream.Writer("output.tar.gz"));

我的数据实际上是作为字符串在内存中的,我想将其写入存档,而不必在两者之间创建一个临时文件。

有什么方法可以做到这一点,例如也许用字符串制作一个fstream?

【问题讨论】:

如何从字符串创建流:***.com/questions/12755997/… 【参考方案1】:

tar-async 模块可以非常简单地处理这个问题,无需制作假流:

var uploadArchive = new Tar(output: fs.createWriteStream('archive.tar'));
uploadArchive.append('somefile.txt', 'someString', function() 
  tape.close();
);

【讨论】:

那么如何 gzip tar 存档?【参考方案2】:

tar-stream 模块也可以做到这一点:

var tar = require('tar-stream')    

var content = "whatever string you have"
var pack = tar.pack()
pack.entry(name: 'src', type: 'directory')
pack.entry(name: 'src/someFile.txt', content) // file
pack.finalize()

tar-stream 也可以使用流作为文件内容的来源。

【讨论】:

以上是关于节点:将字符串作为文件添加到 tar 存档中(没有临时文件)的主要内容,如果未能解决你的问题,请参考以下文章

添加到 tar 存档后删除文件

使用 Apache Commons Compress 库以非机器依赖的方式将文件和目录添加到 Tar 存档

Drupal:将存档添加到主链接作为 SubNav

在 Perl 脚本中无法将目录添加到存档

在 Ruby 中,如何将 tar 归档流直接提取到文件系统?

制作没有前缀的 mercurial 存档