gpt4 book ai didi

java - 客户端的 pako 和服务器端的 java

转载 作者:太空狗 更新时间:2023-10-29 17:49:43 25 4
gpt4 key购买 nike

我正在尝试在 Angular 应用程序中使用 ( pako .js) 压缩 Post 的有效负载,并通过剩余通信在 Java 后端应用程序中获得答案。在后端,我写了一个拦截器,并尝试通过 GZIPInputStream 解压缩请求。但是,我总是收到“不是 GZIP 格式”的消息。

问题可能出在输入流的编码上,但我不知道如何解决我的问题。我测试了很多解决方案,但没有一个有效。

如果我查看输入流的 byte[],这是第一个索引

[31, -62, -117, 8, 0, 0, 0, 0...

我做错了什么?

Angular的部分

var stingtogzip = encodeURIComponent(JSON.stringify(criteria));
var gzipstring= pako.gzip(stingtogzip , { to : 'string'});

options.headers = new Headers();
options.headers.append("Content-Encoding","gzip");
options.body = gzipstring;
options.method = 'POST';
return this.http.request(req, options)

拦截器代码:

@Provider
public class GZIPReaderInterceptor implements ReaderInterceptor {
public Object aroundReadFrom(ReaderInterceptorContext ctx)
throws IOException {
String encoding = ctx.getHeaders().getFirst("Content-Encoding");
if (!"gzip".equalsIgnoreCase(encoding)) {
return ctx.proceed();
}

InputStream gzipInputStream = new GZIPInputStream(ctx.getInputStream());
ctx.setInputStream(gzipInputStream);
return ctx.proceed();

}
}

最佳答案

终于找到解决办法了:

-不需要encodeURIComponent

-使用Blob将数据传输到服务器

var stingtogzip = JSON.stringify(criteria);
var gzipstring= pako.gzip(stingtogzip);
var blob = new Blob([gzipString]);
options.headers = new Headers();
options.headers.append("Content-Encoding","gzip");
options.body = blob;
options.method = 'POST';
return this.http.request(req, options)

关于java - 客户端的 pako 和服务器端的 java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47389750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com