【发布时间】:2017-07-01 05:35:54
【问题描述】:
我需要能够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)
我也尝试过使用数组作为缓冲区,不开心。
【问题讨论】:
-
呃?似乎您正在将长度为 0 的缓冲区传递给
fs.createWriteStream,这最终会导致错误 -
我知道这一点,但是,当我首先创建一个目录的 tar 时,我不知道它的大小,应该如何分配缓冲区?