问题标签 [deflatestream]

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 投票
0 回答
274 浏览

c# - 在 asp.net mvc 中使用 C# 解压缩正文请求,已使用 pako 库 JS 压缩

我有一个 asp.net mvc 应用程序,想使用 Pako 库(使用 gzip 和 deflate 编码)压缩视图中的请求正文,并在使用 OnActionExecuting 和 GZipStream/DeflateStream 到达控制器之前解压缩正文请求。

为什么要这样做?因为我有一个阻止所有请求 > 128KB 的防火墙,所以我在必要时进行压缩,我已经使用 angular 10 和 .NET Core API 中的另一个应用程序执行此操作,但在 asp.net mvc 中不能做同样的事情:(

现在我可以压缩正文并使用 ajax 将其发送到控制器,触发 OnActionExecuting 但我的代码不起作用 request.Filtrer 通过但我在模型控制器中有 null 并且 filterContext.ActionParameters.Values 也是 null 。

我用 angular 10 和 API.NET Core 实现了这一点,它工作我在 angular 中使用了 pako,在我的 api 核心中使用了这段代码:

我的 ASP.NET MVC 代码:

看法 :

动作过滤器属性:

另一个问题我有它是 HttpContext.Request.InputStream (流包含我的身体)它是只读的

谢谢

0 投票
1 回答
165 浏览

delphi - C#压缩和Delphi解压

我有一些使用 C# DeflateStream 类压缩的文件,如下所示:

没什么花哨的,所有的默认值。它使用等效的 C# DeflateStreamCode 解压缩很好,即

但我需要使用 Delphi 解压缩它。我已经尝试过 zlib 库(XE8,XE10.3),类似以下内容:

但不断收到“数据错误”消息。如何解压缩 C# DeflateStream 压缩文件?

0 投票
0 回答
77 浏览

c# - 有什么方法可以在 .Net Framework 中复制 .Net Core DeflateStream.Flush() 行为?

背景

我想在应用程序的未来 .Net Core 端口中使用StreamJsonRpc作为 WCF 的替代品。在将代码移植到 .Net Core 之前,我想更新现有代码(即 .Net Framework 4.8)以使用 StreamJsonRpc。

因为StreamJsonRpc写入的数据比二进制源数据大,而且压缩性极强,所以想用DeflateStream它来压缩。

这导致了问题:压缩适用于 .Net Core,但不适用于 .Net Framework。

为什么它不起作用

考虑以下代码:

对于 .Net Core,这会输出一个大于零的数字。对于 .Net Framework,此输出为零。

我已经进行了检测StreamJsonRpc,我可以看到它Stream.Flush()在写入数据块后正在调用,所以我很确定这是问题所在。

.Net Core 实现DeflateStream.Flush()实际上会刷新,但 .Net Framework 实现什么也不做。

我的问题

.Net Framework 4.8 中有什么方法可以刷新DeflateStream吗?如果有,我可以DeflateStream为该实现编写一个包装类,Stream.Flush()以便它实际刷新。

其他注意事项

2015 年 10 月为此提出了一个错误,并于 2015年 12 月为 .Net Core 修复了该错误。

此外,文档DeflateStream.Flush()不正确。

对于 .Net Framework.Net Core,标头说:

此方法的当前实现没有功能。

但在备注下它说:

如果压缩模式设置为 Compress,则刷新内部缓冲区。

显然,这两件事都不正确,.Net Core 与 .Net Framework 的文档应该不同。

0 投票
1 回答
48 浏览

c# - DeflateStream.Flush() 没有功能?

我试图使用 DeflateStream 压缩字节数组。拧完数据后,我正在寻找一种关闭压缩的方法(标记为完成)。起初,我尝试了 Dispose(),然后是 Close(),但这些都使结果 MemoryStream 无法读取。然后我想我可能需要Flush(),但是描述说“这个方法的当前实现没有功能”

在此处输入图像描述

但似乎没有 Flush(),结果似乎是空的。“此方法的当前实现没有功能”是什么意思?

在此处输入图像描述

0 投票
1 回答
38 浏览

c# - 如何从 DeflateStream 中获取压缩数据的长度?

以下是我编写的一个简单的压缩方法DeflateStream

这个方法的特别之处在于我没有使用MemoryStream. 这是因为它是一个高吞吐量的服务器。数组outputData是从 租来的ArrayPool,用来保存压缩后的字节,这样我用完后可以把它还给ArrayPool.

压缩发生正确,压缩数据正确放入outputData,但memStream.Position为零,所以我无法找出已写入MemoryStream.

只有一部分outputData被压缩数据占用。如何找出压缩数据的长度?