Ajax Angular2 Http POST pads二进制传输

Ajax Angular2 Http POST pads二进制传输,ajax,angular,Ajax,Angular,我正在尝试使用带有Angular2的Http类的POST发送原始二进制数据(二进制文件的一部分)。然而,在服务器端,接收到的数据被填充,这可能是由于一些客户端JSON转换。例如,从浏览器发送的100000字节在服务器上读取为121201字节 我可以使用jQuery.ajax实现这种原始二进制传输,并保留在同一服务器上接收的字节数: $.ajax({ type: "POST", url: "http://localhost:3000/analysis", data: b

我正在尝试使用带有Angular2的Http类的POST发送原始二进制数据(二进制文件的一部分)。然而,在服务器端,接收到的数据被填充,这可能是由于一些客户端JSON转换。例如,从浏览器发送的100000字节在服务器上读取为121201字节

我可以使用jQuery.ajax实现这种原始二进制传输,并保留在同一服务器上接收的字节数:

  $.ajax({
    type: "POST",
    url: "http://localhost:3000/analysis",
    data: blob,
    processData: false,
    contentType: 'application/octet-stream',
    error: function (err) {
      console.log(err);
    },
    success: function (data) {
      // do something heroic
    }
  });
正在使用FileReader API的
readAsBinaryString
读取文件。我的怀疑是,我需要做一些类似Angular 1中的事情,您将
transformRequest
设置为空数组,这样字节就不会强制转换为JSON。这是我的Angular2版本:

  getAnalysis = (headerBytes: any) => {
    let header = new Headers();
    header.append("Content-Type", "application/octet-stream");
    this.http.post("http://localhost:3000/analysis", headerBytes, {
        headers: header
    })
        .retry(3)
        // response data, not data being sent
        .map(responseData => responseData.json())
        .subscribe(
        data => this.result = data,
        err => this.logError(err),
        () => console.log("request complete")
        );

};

我可以直接在jQuery中下注并执行此操作,但肯定有一种方法可以使用新的热度执行此操作?

如果您查看第62行,可能还不支持此操作:
//TODO:support URLSearchParams | FormData | Blob | ArrayBuffer
。@Sasxa nice find!现在我将继续使用
$.ajax