【问题标题】:Node.js zlib gzip buffer as "file" inside of archiveNode.js zlib gzip 缓冲区作为存档内的“文件”
【发布时间】:2022-02-02 16:53:57
【问题描述】:
我想将 node.js 中的 utf-8 缓冲区压缩为 gzip 存档中的“文件”。 zlib 页面上似乎没有任何关于如何执行此操作的文档,并且从我迄今为止发现的内容来看,这里没有关于堆栈溢出的见解。最后,我实际上并不想将文件写入文件系统,而只是将数据作为 HTTP 请求发送。如果有人知道如何实现这一点(zlib 是否已经支持它或者是否有一个包可以做到这一点),那将是一个很大的帮助!
只是为了弄清楚这是为了什么,这是通过 HTTP 将 Dockerfile(以字符串形式)发送到 docker 实例以执行构建映像命令。
谢谢!
【问题讨论】:
标签:
node.js
buffer
gzip
zlib
docker
【解决方案1】:
没有“gzip 存档”之类的东西。 gzip 格式仅存储单个流或文件。您是指 gzipped tar 格式 (.tar.gz) 吗?
zlib 当然支持在内存中写入 gzip 流。使用 deflateInit2() windowBits 参数,您可以请求 gzip 格式。见zlib.h。
我没有用过node.js,所以不知道它在zlib的前面是什么。
【解决方案2】:
我把这个留在这里以备将来参考:
import { promises as fs } from 'fs'
import { gzip } from 'zlib'
import { promisify } from 'util'
const gzipPromise = promisify(gzip)
async function main (filename) {
// fs returns buffer
const data = await fs.readFile(filename)
const gzippedData = await gzipPromise(data)
await fs.writeFile(`${filename}.gz`, gzippedData)
}