问题标签 [pako]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
270 浏览

json - json到base64的转换

我一直在寻找 pako 将我的 base64 更改为 JSON,我可以完美地工作。但是我怎样才能扭转它呢?

我使用了在线 JSON 到 base64,但结果与我最初输入的原始 base64 不同。

我在此片段的评论中留下了我的 base64 样本及其输出(也已评论)。我可以用 pako 把它恢复到原来的状态吗?

0 投票
1 回答
92 浏览

javascript - 在 Rails 中缩小响应并在 JS 中膨胀

我在 Ruby on Rails 中创建了一个 API。我没有将响应正文与 API 响应一起发回,而是将其广播到外部服务,然后由外部服务负责实时分发给所有连接的客户端(即 WebSockets)。

今天我遇到了一个问题,我意识到我们的第 3 方提供商只允许最大 25kb 的数据包。随着数据增长到超过此限制并且第 3 方服务已开始阻止呼叫,我们的一项响应已开始出现问题。附带说明一下,数据包很少会增长到大于 25kb。

我做了一些研究,正在考虑最好的主意是什么。我正在考虑的一个想法是使用压缩响应ZLib,然后在 JS 端对其进行解压缩。导致此问题的文章是这个 StackOverflow question

我设法使通货紧缩和 Base64 编码正确,但无法在 JS 端解码。我还测试了生成的 Base 64 字符串,但像这样的服务将 base64 字符串标记为无效。

我的代码如下所示:

在 Rails 控制器中

在接收广播的 JS 中:

当我执行广播时,我收到错误:unknown compression method. 我知道这可能与pako.,但我也尝试了其他方法但没有成功。有没有人有任何想法甚至更好的方法来解决这个问题?

更新:

Rails 中生成的 Base64 字符串如下所示:

0 投票
1 回答
182 浏览

javascript - reactJS中实现加密解密OpenSSL和zlib

我的 PHP 代码有 2 个函数,有使用 openSSL 的加密和解密,实际上在我重构它之前,我将 openSSL 结果编码为 base64,导致它太长我更改为使用 zlib(gzdeflate,gzinflate)压缩然后转换最后结果为十六进制。

这是我的 PHP 代码,它在 PHP 上运行良好:

然后我尝试在 React 上将 JS 转换为 JS 并制作了简单的实用程序,这是我到目前为止的 JS 代码:

将 gzinfalte、gzdeflate、hex2bin、bin2hex方法拆分为另一个名为string.js的 JS 文件并导入一些包CryptoJSPakoJS

string.js 包含一些这样的方法:

尝试调试时,hex2bin方法没有错误

但是,当我尝试将二进制文件转换为gzinflate时,它​​会显示错误

无法读取未定义的属性“密文”

当我尝试更改secret_keyiv时出现错误:

显示错误

错误:无效的存储块长度

任何人都可以帮助我吗?

0 投票
0 回答
310 浏览

javascript - 如何在浏览器中使用 JavaScript pako 库解压缩文件?

我正在制作带有 a-frame 的 .glb 查看器。我的 glb 文件很大(大约 400MB),所以我正在尝试加载压缩的 zip 文件(大约 20MB)并在浏览器中解压缩它。但是,pako 不工作.. 错误日志说“未知的压缩方法”。

我使用 Windows 默认功能(右键单击)压缩了一个文件。我有什么问题吗?

0 投票
1 回答
100 浏览

javascript - 在会话存储键值对中,值字符串的长度是否有字符限制?

我有一个数据超过 5MB 的对象。我正在使用 pako 将数据压缩到大约 1.7MB。然后我尝试将压缩数据存储到会话存储中。对于较小的对象,这很好用,但是对于这个较大的对象,我超出了配额。考虑到我计算的数据大小低于 5MB,我想知道会话存储中可以存储的内容是否还有其他限制,例如值的字符串长度或 Uint8Array 的字节长度。

0 投票
1 回答
249 浏览

javascript - 无法膨胀 SessionStorage 数据;根据通货膨胀方法获得“不正确的标头检查”或“无效的存储块长度”

我有超过 5MB 的数据需要存储在会话存储中。为此,我使用 pako 来压缩数据。

首先,我们有一个 Angular 应用程序,它从 API 接收数据并将其添加到哈希“cachedLookups”中:

然后我们在同一个浏览器窗口中有一个 AngularJS 应用程序,它从会话存储中检索这些数据:

当我点击 pako.inflate 时,我得到“不正确的标题检查”。我也尝试过 inflateRaw,在这种情况下我得到“无效的存储块长度”。我在这里使用 TextEncoder/Decoder,因为尝试将 Uint8Array 直接存储到 SessionStorage 会强制 SessionStorage 超出其配额,尽管计算的大小低于 5MB。我认为这个问题与 Storage API 是关于存储键值字符串对的事实有关。

0 投票
2 回答
256 浏览

javascript - 我想用 JavaScript 解压缩 GZIP 字符串

我有这个 GZIPed 字符串:H4sIAAAAAAAA//NIzcnJVyguSUzOzi9LLUrLyS/XUSjJSMzLLlZIyy9SSMwpT6wsVshIzSnIzEtXBACs78K6LwAAAA==

我用这个网站创建了它:http ://www.txtwizard.net/compression

我曾尝试使用pako解压缩它。

问题是 Pako 抛出错误:incorrect header check

我在这里想念什么?

一个JSbin

0 投票
0 回答
208 浏览

node.js - ERR_PACKAGE_PATH_NOT_EXPORTED:包子路径“./dist/pako.es5.js”不是由“出口”定义的

我在将节点应用程序部署到生产环境时遇到问题。当我尝试使用 Node 执行脚本时,出现以下错误:

但是,当我在测试服务器上执行此脚本时工作正常。我们甚至将节点模块文件夹从测试服务器复制并粘贴到生产服务器,但错误是一样的。我认为是某些外部包中的错误,但我不明白相同的配置如何根据系统出现这种错误。

我尝试将 npm 从 6.14.5 更新到 7.23.0,但错误仍然存​​在。测试和生产服务器都使用相同版本的 Node,14.X

剩下的唯一可能性是我在两台服务器之间使用了不同的 NODE_ENV 变量,但查看错误消息似乎不太可能。提前致谢。

0 投票
0 回答
35 浏览

json - pako.js 中超出了最大调用堆栈大小

我已经使用 pako js 来解压缩 gzip 字符串,但是字符串的大小太大(大约 15 MB),所以我得到了超出最大调用堆栈大小的错误。

错误: 超出最大调用堆栈大小错误

0 投票
0 回答
48 浏览

javascript - pako.inflate() - 尝试解压缩数据时未发现错误的标头检查 (ReactJS)

再会。我正在 React App 中创建 covid greenpass 解码器,我需要有关 pako.js 的帮助。我正在尝试对从 base45 解码中获得的 Unit8Array 进行膨胀。而且我收到“未捕获的错误标头检查”错误。我尝试添加{to: "string"}inflate()方法,或使用inflateRaw(). 我会很乐意提供帮助的。这是代码:

decodedBase45在控制台中看起来像这样:

或者,也许你可以告诉我如何做到这一点zlib