JavaScript / C#对通过XHR发送的数据进行通胀和收缩

时间:2016-03-18 14:54:00

标签: javascript c# blob deflate

我必须在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...

I found out 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()读取服务器端的数据。

您认为我应该如何正确地缩小数据服务器端?

1 个答案:

答案 0 :(得分:0)

将数据传递给数组中的blob构造函数

var dataBlob = new Blob([data], { "type": "application/zlib" });

来自MDN

语法

  

var aBlob = new Blob(array,options);

<强>参数

  • array是一个ArrayBuffer,ArrayBufferView,Blob,DOMString对象的数组,或任何此类对象的混合,将放在Blob中。