javascript - 如何在 node.js 中返回存档的可读流而不写入文件系统?

标签 javascript node.js

我想重构我的函数以返回一个可读流,我将通过管道将其传输到 http 请求模块, 目前我正在返回存档文件位置并从中创建一个读取流:

const filepath = yield archive.archiveFilesAsTargz('path', 'name.tar.gz');

fs.createReadStream(filepath).pipe(request(options)).then(body =>{
        console.log(body);
    });

我正在寻找的流程是:

  1. 获取目录位置并将其存档
  2. 以流的形式获取存档并返回它(解析它)
  3. 调用该函数并通过管道将读取流发送至请求

我的功能如下:

    exports.archiveFilesAsTargz = function (dest, archivedName) {
    return new Promise((resolve, reject)=> {
        const name = slugify(archivedName);
        const filePath = path.join(dest, name + '.tar.gz');
        const output = fs.createWriteStream(filePath);
        const archive = archiver('tar', {
            gzip: true
        });

        archive.pipe(output);
        archive.directory(dest, name).finalize();
        output.on('close', ()=> resolve(filePath));
        archive.on('error' ,(err) => reject(err));
    });
};

最佳答案

好吧,在另一次阅读和播放之后我解决了它......

function archiveFilesAsTargz (dest, name) {
        const archive = archiver('tar', {
            gzip: true
        });
        return archive.directory(dest, name).finalize();
}

以下内容将返回一个读取流:

archive.directory(dest, name).finalize();

所以使用它对我来说非常有用

const pack = archiveFilesAsTargz(zippath, 'liron');

pack.pipe(request(options)).then(body =>{
        console.log(body);
    })
    .catch(err => {
        console.log(err);
    });

关于javascript - 如何在 node.js 中返回存档的可读流而不写入文件系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40355419/

相关文章:

javascript - 对 mongoose 和 es6 的 promise 没有按预期工作

node.js - 500 错误 : ENOENT, 打开 'C :\Users\Gilbert\WebstormProjects\games\views\layout. hbs

javascript - 使用 Base64 编写 HTML5 二进制文件

postgresql - 如何使用 NodeJS 将 Postgres 数据库迁移到 heroku?

c# - jQuery 页面中的多个用户控件

javascript - 我找不到访问 dGrid 商店的简单方法

node.js - 如何编写 Node.js 服务器以支持多服务器水平扩展

javascript - 带 app.use 的 multer 配置返回 TypeError

javascript - ng-include 的正确语法是什么?

javascript - MVC 中元标记内容 url :? 的替代方案是什么