【问题标题】:Saving Uint8Array to an gzip after conversion转换后将 Uint8Array 保存到 gzip
【发布时间】:2023-03-28 01:49:02
【问题描述】:

我一直在寻找客户端转换为 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();

【问题讨论】:

  • 你有什么问题?
  • 我应该如何将 Uint8Array 保存到负责写入文件的函数中?
  • + 我想替换当前用于写入文件的函数
  • 我不想使用 Node.js 函数

标签: javascript gzip file-conversion uint8array


【解决方案1】:

您并没有真正说明您的最终目标是什么,但我猜您想生成一个用户可以从浏览器下载的文件。使用Blob API 很简单。以下基于(阅读:几乎相同)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);
&lt;script src="https://unpkg.com/pako@1.0.4/dist/pako_deflate.js"&gt;&lt;/script&gt;

【讨论】:

  • 很抱歉没有完整解释我想要做什么。我不确定自己应该看起来如何,但主要的一点是不使用服务器计算。保存和使用文件系统是临时的,以检查它是否正常工作,但我想将 gziped 文件发布到服务器目录,数据库形式,在 ungziping 后立即可读。
  • 好的。你在哪一部分有问题?
  • 我刚注意到一个sn-p,很好!您是包含所有 Javascript 文件还是只包含需要的文件?我一直在考虑只包含此操作所需的内容。
  • 我需要自己做一些研究来了解现在需要什么。
  • 正如你在 sn-p 中看到的,我只包含了pako_deflate.js
猜你喜欢
  • 1970-01-01
  • 2021-07-17
  • 1970-01-01
  • 2021-04-15
  • 1970-01-01
  • 2016-05-17
  • 1970-01-01
  • 2018-02-19
  • 2017-02-04
相关资源
最近更新 更多