标签: pako

浏览器 Javascript:将 Json 压缩为 gzip 并上传到 S3 预签名 URL

任何意见,将不胜感激。我的 Web 应用程序中有一个 json 变量,我想对其进行 gzip 压缩并通过预签名 URL 上传到 S3。

我能够成功上传 JSON,但无法对 JSON 进行 gzip 压缩然后上传。

我尝试构建 gzipped json 的三种不同方法是:

// example json
const someJson = { testOne: 'a', testTwo: 'b' };

// Attempt one
const stringUtf16 = JSON.stringify(someJson);
const resultAsBinString = pako.gzip(stringUtf16);

// Attempt two
const stringUtf16 = JSON.stringify(someJson);
const resultAsBinString = pako.gzip(stringUtf16, { to: 'string' });

// Attempt three
const stringUtf16ThatWeNeedInUtf8 = JSON.stringify(someJson);
const stringUtf8 = unescape(encodeURIComponent(stringUtf16ThatWeNeedInUtf8));
const resultAsBinString = pako.gzip(stringUtf8);
Run Code Online (Sandbox Code Playgroud)

对于每次尝试,我都通过 Angular 的 HTTP 客户端上传 resultAsBinString,标头为 Content-Type: …

javascript gzip amazon-s3 pako

5
推荐指数
2
解决办法
6912
查看次数

将 Pako deflate 与 Python 结合使用

我正在尝试压缩字典以访问 API。
我阅读了某人用 JavaScript 和一个名为“pako”的库压缩数据的代码,并自己尝试了。它工作完美:

var myDictionary = {...}

var b = pako.deflate(JSON.stringify(a), { 
    to: "string", 
    gzip: !0 
  }); 
  return b = btoa(b) 
}

var compressed = b(n)
Run Code Online (Sandbox Code Playgroud)

现在我想用Python做同样的事情:我尝试了以下方法,但结果不同并且不起作用:

my_dictionary = {...}
data_json = json.dumps(my_dictionary, ensure_ascii=False)
data_gzip = zlib.compress(bytes(data_json, "utf-8"))
compressed = base64.b64encode(bytes(str(data_gzip), "utf-8"))
Run Code Online (Sandbox Code Playgroud)

有谁知道如何用Python解决这个问题吗?Python 是否有类似 pako 的库?

javascript python compression pako

2
推荐指数
1
解决办法
4223
查看次数

Pako无法收缩python中生成的gzip文件

我使用以下代码从python生成gzip文件:(使用python 3)

    file = gzip.open('output.json.gzip', 'wb')
    dataToWrite = json.dumps(data).encode('utf-8')
    file.write(dataToWrite)
    file.close()
Run Code Online (Sandbox Code Playgroud)

但是,我正在尝试使用Pako库在Javascript中读取此文件(我使用的是Angular 2):

this.http.get("output.json.gzip")
      .map((res:Response) => {
        var resText:any = new Uint8Array(res.arrayBuffer());
        var result = "";
        try {
          result = pako.inflate(resText, {"to": "string"});
        } catch (err) {
          console.log("Error " + err);
        }
        return result;

      });
Run Code Online (Sandbox Code Playgroud)

但我在控制台中收到此错误:unknown compression method.我应该做些什么来正确地夸大gzip文件吗?

javascript python gzip angular pako

2
推荐指数
1
解决办法
984
查看次数

将节点模块导入角度打字稿/ angularcli 的正确方法是什么

我正在将一些“遗留”(非打字稿)js 库导入我的 angular SPA。

通常我只是从 cdn 添加一个负载到 index.html 像:

<script src="//cdnjs.cloudflare.com/ajax/libs/pako/1.0.6/pako.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

在角分量中,我只是进行了 decal

declare var pako: any;
Run Code Online (Sandbox Code Playgroud)

这通常有效。现在我喜欢在本地“托管”这个库。我可以将它添加到 angular 项目中

npm install pako
Run Code Online (Sandbox Code Playgroud)

但是我如何将它添加到 angular 应用程序中?
我测试了向 polyfills.ts 添加导入(这适用于hammerjs 但不适用于 pako)

这也应该适用于 ng build(并且可能会被添加到编译/打包的 runtime.js

顺便说一句:这是一个测试 stackblitz https://stackblitz.com/edit/ng-load-pako

npm typescript angular-cli angular pako

2
推荐指数
1
解决办法
2767
查看次数

使用 Pako 在 Javascript 中提取 gzip 数据 - 编码问题

我正在尝试运行我期望的一个非常常见的用例:

我需要从 Amazon S3 下载一个 gzip 文件(复杂的 JSON 数据集),并在 Javascript 中解压缩(gunzip)它。除了最后的“充气”步骤外,我一切正常。

我正在使用 Amazon Gateway,并且已经确认网关正在正确传输压缩文件(使用 Curl 和 7-zip 来验证结果数据是否来自 API)。不幸的是,当我尝试使用 Pako 在 Javascript 中扩充数据时,出现错误。

这是我的代码(注意:response.data 是从 AWS 传输的二进制数据):

apigClient.dataGet(params, {}, {})
      .then( (response) => {
        console.log(response);  //shows response including header and data

        const result = pako.inflate(new Uint8Array(response.data), { to: 'string' });
        // ERROR HERE: 'buffer error'  

      }).catch ( (itemGetError) => {
        console.log(itemGetError);
      });
Run Code Online (Sandbox Code Playgroud)

还尝试了一个版本,通过在膨胀之前添加以下内容将二进制数据输入拆分为数组:

const charData = response.data.split('').map(function(x){return x.charCodeAt(0); });
const binData = new Uint8Array(charData);
const result = pako.inflate(binData, { to: …
Run Code Online (Sandbox Code Playgroud)

javascript gzip amazon-s3 pako

1
推荐指数
1
解决办法
4194
查看次数

尝试膨胀 Websocket 消息时 Pako.js 错误,“存储块长度无效”

我正在尝试使用 javascript 来膨胀来自第三方 websocket 的消息,但是收到了pako.js

“无效的存储块长度”错误。

我用来实现网络套接字的示例代码可以在这里找到:

https://github.com/okcoin-okex/API-docs-OKEx.com/tree/master/demo

可以在此处找到代码的完整工作版本:

https://github.com/Tucsky/SignificantTrades/blob/master/src/exchanges/okex.js ( https://aggr.trade )

我尝试使用zlib.js而不是Pako.js使用该库,但遇到了更困难的问题。我尝试过在 stackoverflow 上找到的其他替代解决方案,但它们似乎没有满足我的需要。

这是我正在运行的显示错误的代码。 https://jsfiddle.net/fwkgmvjr/

    let myAPI = new WebSocket('wss://real.okex.com:10442/ws/v3');

    //When the connection is first opened
    myAPI.onopen = event => {

      console.log('Socket opened')
      myAPI.send('{"op": "subscribe", "args":["futures/ticker:ETH-USD-190927"]}')
    }

    myAPI.onmessage = event => {


      if (event.data instanceof String) {
        console.log(event.data)
      } else {

        try {
          console.log(JSON.parse(pako.inflateRaw(event.data, {
            to: 'string'
          })))
        } catch (err) {
          console.log(err)
        }
      }
    }

    myAPI.onclose = event => {

      console.log('Socket …
Run Code Online (Sandbox Code Playgroud)

javascript pako

1
推荐指数
1
解决办法
2699
查看次数

JWS 登录 java 和 typescript 不会产生相同的结果

我正在尝试使用 Deflater.class 对 Java 中的 JSON 字符串进行原始压缩。但是java和typescript生成的压缩结果有一些区别。

let bodyString = JSON.stringify(idTokenPayload);
const fields = deflate ? { zip: 'DEF' } : {};
const body = deflate ? pako.deflateRaw(bodyString) : bodyString;
Run Code Online (Sandbox Code Playgroud)

在爪哇,

protected String deflateAndBase64Encode(String jsonString) {
        try {

            ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
            Deflater deflater = new Deflater(Deflater.BEST_COMPRESSION, true);
            DeflaterOutputStream deflaterStream = new DeflaterOutputStream(bytesOut, deflater);
            deflaterStream.write(jsonString.getBytes());
            deflaterStream.finish();
            
            return Base64.getEncoder().encodeToString(bytesOut.toByteArray());
        } catch (IOException e) {
        }
        return "";
    }
Run Code Online (Sandbox Code Playgroud)

更新:

我需要按如下方式转换 JSON 有效负载以生成智能健康卡。Json Payload -> Minified JSON -> Raw deflate -> …

java deflate typescript pako raw

0
推荐指数
1
解决办法
122
查看次数