nodejs / fs:将tar写入内存缓冲区

我需要能够tar目录,并通过HTTP PUT发送到远程端点。

我当然可以创buildtar,将其保存到磁盘,然后再读取并发送。

但我宁愿创build焦油,然后pipe它到一些缓冲区,并立即发送。 我一直无法做到这一点。

目前代码:

 var tar = require('tar'); var fs = require("fs"); var path = "/home/me/uploaddir"; function getTar(path, cb) { var buf = new Buffer(''); var wbuf = fs.createWriteStream(buf); wbuf.on("finish", function() { cb(buf); }); tar.c({file:""},[path]). pipe(wbuf); } getTar(path, function(tar) { //send the tar over http }); 

此代码导致:

 fs.js:575 binding.open(pathModule._makeLong(path), ^ TypeError: path must be a string at TypeError (native) at Object.fs.open (fs.js:575:11) 

我也尝试使用一个数组作为缓冲区,没有喜悦。

以下解决scheme

创buildtar,然后将其pipe理到一些缓冲区并立即发送

并以非常快的速度感谢tar-fs库:

首先安装用于简化请求和tar-fs的库request ,为tar-stream提供文件系统绑定: npm i -S tar-fs request

 var tar = require('tar-fs') var request = require('request') var fs = require('fs') // pack specific files in the directory function packTar (folderName, pathsArr) { return tar.pack(folderName, { entries: pathsArr }) } // return put stream function makePutReq (url) { return request.put(url) } packTar('./testFolder', ['test.txt', 'test1.txt']) .pipe(makePutReq('https://www.example.com/put')) 

我已经将函数名称重命名为超级冗长。