【发布时间】:2021-02-01 14:38:40
【问题描述】:
假设我在 NodeJS 中有以下内容:
import {
gzip
} from "node-gzip";
const samlToken = fs.readFileSync(
"./localDevToken.txt",
"utf8",
);
const bufferSamlToken = Buffer.from(
samlToken.replace("\r\n", ""),
"utf8",
);
const gZipToken = await gzip(bufferSamlToken);
localDevToken = gZipToken
.toString("base64")
.replace(/\+/g, "-")
.replace(/\//g, "_")
.replace(/=+$/g, "");
我想在前端做同样的事情。我怎样才能实现它?
这是我尝试使用来自https://github.com/nodeca/pako 的 Pako 库
function convertSamlToken(input) {
var samlToken = input.replace("\r\n", "");
samlToken = pako.gzip(samlToken, {
to: 'string'
});
samlToken = btoa(samlToken)
.replace(/\+/g, "-")
.replace(/\//g, "_")
.replace(/=+$/g, "");
return samlToken;
}
但是输出不同。怎么了?
【问题讨论】:
-
不确定这是唯一的问题,但 pako.gzip 返回一个 Uint8Array,在其上调用
btoa将首先将该 Uint8Array 转换为其字符串表示形式:0 到 255 之间的一系列数字,以逗号分隔,然后将该字符串转换为其 b64 表示形式。这根本不是您想要的,您希望将实际字节转换为它们的 base64 表示。看看stackoverflow.com/questions/12710001/… 做正确的事
标签: javascript node.js gzip