node.js - nodejs/fs : writing a tar to memory buffer

标签 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)

我也尝试过使用数组作为缓冲区,但没有什么乐趣。

最佳答案

解决方案如下

creates the tar, then pipes it to some buffer and sends it immediately

并与 great speed感谢 tar-fs 库:

首先安装库 request用于简化请求和 tar-fs ,它为 tar-stream 提供文件系统绑定(bind):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 冗长。

关于node.js - nodejs/fs : writing a tar to memory buffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44854250/

相关文章:

node.js - 创建一个特定大小的空文件?

node.js - desktopCapturer 示例...如何使其适用于特定应用程序

javascript - 如何将多个 Frida JS 文件/函数导入到运行时 CLI 中?

node.js - TypeScript Node 服务器设置。如何删除 dist 文件夹中的所有 *.d.ts 文件?

javascript - console.log 不是 nodejs fs.readfile 中的函数

node.js - 使用 axios 处理 JSON 数据时遇到问题

javascript - 从 Twitter 媒体的 URL 读取文件同步 - node.js

json - 如何通过 Node 中的 mongojs 将 .json 文档插入到 mongo 服务器

javascript - Node fs.readdir 在包含太多文件的文件夹中卡住

node.js - fs 检测处理不同的错误类型