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

时间:2017-06-30 20:17:37

标签: node.js fs

我需要能够tar一个目录,并通过HTTP PUT将其发送到远程终端。

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

但是我宁愿创建tar,然后将它传递给某个缓冲区并立即发送。我无法做到这一点。

到目前为止

代码:

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)

我也尝试使用数组作为缓冲区,没有快乐。

1 个答案:

答案 0 :(得分:1)

以下解决方案

  

创建tar,然后将其传送到某个缓冲区并立即发送

great speed感谢tar-fs库:

首先安装库request以简化请求,并tar-fs为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'))

我已将函数名重命名为super verbose。