JavaScript/C# 膨胀和压缩通过 XHR 发送的数据
JavaScript/C# Inflate and deflate data sent through XHR
我必须在JavaScript中膨胀一些数据(实际上是csv文件块)客户端,并在C#的服务器端压缩它。
在客户端,我正在使用pako,它看起来像这样:
var fileReader = new FileReader();
fileReader.onload = function(progressEvent) {
var arrayBuffer = this.result;
var binData = new Uint8Array(arrayBuffer);
var data = pako.deflate(binData);
var dataBlob = new Blob(data, { "type": "application/zlib" });
callback(dataBlob);
};
fileReader.readAsArrayBuffer(bytes);
它似乎运作良好。我说"似乎"是因为如果我保存在服务器端接收的数据,我会得到一个看起来像这样的字符串:
1201562201899117927731141602491...
我发现 ZLib 压缩数据应该以 0x78 和 0x9C 开头,120 是十进制的0x78,156 是十进制的0x9C,所以客户端膨胀似乎没问题。
问题出在服务器端,我无法压缩数据。这是我的代码的样子:
// Read past the first two bytes of the zlib header
inputStream.Seek(2, SeekOrigin.Begin);
using (var zipStream = new DeflateStream(inputStream, CompressionMode.Decompress))
using (FileStream fileStream = File.Create(filePath))
{
zipStream.CopyTo(fileStream);
}
我从 DeflateStream 构造函数收到一个错误,说数据不太正确。
现在这是我到目前为止收集的内容:
- 如果我在pako.deflate中添加一个{"to": "string" },它会返回一些二进制字符串而不是Uint8Array。它看起来很像我在给数据服务器端膨胀时得到的,所以这可能是 C# DeflateStream 所期望的。
- 数据通过 XHR FormData 发送,它需要一个 Blob,它似乎总是将数据转换为十进制字符串。
- 我使用 HttpContent.ReadAsStreamAsync() 读取服务器端的数据。
您认为我应该怎么做才能正确放气数据服务器端?
将数据传递给数组中的 blob 构造函数
var dataBlob = new Blob([data], { "type": "application/zlib" });
来自 MDN
语法
var aBlob = new Blob( array, options );
参数
- array 是 ArrayBuffer、ArrayBufferView、Blob、DOMString 对象或任何此类对象的混合数组,这些对象将被放入 Blob 中。
相关文章:
- 访问通过XHR.onreadystatechange回调中的XHR.send(data)发送的数据
- 有没有办法清除客户端上的XHR缓存数据
- JavaScript/C# 膨胀和压缩通过 XHR 发送的数据
- AngularJS / Karma 单元测试与真实的 XHR 数据 / passThrough()
- 发送 XHR 请求而不接收任何数据
- 在 chrome 调试器中更改 XHR 请求数据
- 访问node.js中xhr请求发送的数据
- 从PHP通过xhr获取数据
- 如何在Socket.IO中使用xhr轮询存储持久数据
- 如何从XHR函数中转义解析后的数据
- 如何使两个Winjs.xhr调用一个用于从网站检索Captca,另一个用于提交数据
- 通过XHR获取json数据,无限期地动态智能渲染dhtmlxgrid循环
- dojo xhr.post,我在xhr里放了一个数组.发布数据,但数据被更改的原因
- Servlet偶尔会从Javascript XHR获取空白数据
- 如何在发送之前将数据附加到XHR请求中
- WebSockets与XHR在大数据量方面的对比
- 如何获取“数据”字段从xhr.responseText
- 如何使用Winj.xhr发送数据到web服务
- 从XHR下载二进制文件数据,然后重新提交
- 将 xhr 数据传递给 rubaxa fileapi