我想重构我的函数以返回一个可读流,我将通过管道将其传输到 http 请求模块, 目前我正在返回存档文件位置并从中创建一个读取流:
const filepath = yield archive.archiveFilesAsTargz('path', 'name.tar.gz');
fs.createReadStream(filepath).pipe(request(options)).then(body =>{
console.log(body);
});
我正在寻找的流程是:
- 获取目录位置并将其存档
- 以流的形式获取存档并返回它(解析它)
- 调用该函数并通过管道将读取流发送至请求
我的功能如下:
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/