转换后将 Uint8Array 保存到 gzip

Saving Uint8Array to an gzip after conversion

我一直在寻找客户端转换为 gzip 文件(在浏览器中)并找到 pako.

我是我的 运行 这个转换的例子,使用服务器端的 Node.js 函数(至少这是我从阅读的内容中对 Node.js 的理解) .

我想将 "fs"(用于写入文件)和 "buffer"(用于保存为可写入负责写入文件的新函数的格式)替换为某些原生 javascript 函数。

这是代码。

var pako = require('pako'), data = "sample text";
var fs = require('fs');

data = pako.gzip(data);
var buffer = new Buffer(data.length);
for (var i = 0; i < data.length; i++) {

    buffer.writeUInt8(data[i], i);

}

var wstream = fs.createWriteStream('output.gz');

wstream.write(buffer);
wstream.end();

您并没有真正说明您的最终目标是什么,但我猜您想要生成一个用户可以从浏览器下载的文件。使用 Blob API that's simple. The below is based on (read: pretty much identical to) an example in the MDN docs:

const data = 'sample text';
const gzipped = pako.gzip(data); // => Uint8Array
const blob = new Blob([gzipped], {type: 'application/gzip'});
const blobUrl = URL.createObjectURL(blob);

console.log('Generated Blob; object URL: %s', blobUrl);

// render link
const link = document.createElement('a');
link.setAttribute('href', blobUrl);
link.innerHTML = 'Download file';
document.body.appendChild(link);
<script src="https://unpkg.com/pako@1.0.4/dist/pako_deflate.js"></script>