Angular 5 HttpClient发布原始二进制数据

时间:2018-01-20 09:54:09

标签: angular typescript protocol-buffers

我的WebApp需要通过ProtBuf与我的服务器通信。为了实现这一点,我需要能够发布原始二进制数据。

这是我现在正在使用的代码。这个问题是d:\Videos\将Uint8Array编码为JSON数组,因此结果不再是有效的protobuffer:

HttpClient

const message = LoginRequest.fromObject({ code: code, username: username, password: password }); const buffer: Uint8Array = LoginRequest.encode(message).finish(); this.http.post('https://api.myserver.com', buffer) .subscribe(/*...*/); 接受一些选项,您可以将HttpClient.post设置为responseTypejsontextblob。但这只是设置了预期的响应类型,请求的主体仍然被编码为JSON。

arraybuffer是否有可能发送未编码的尸体?

编辑:这是我在服务器上收到的正文:

HttpClient

3 个答案:

答案 0 :(得分:3)

正如在reference中可以看到的,请求body的类型是any,这表明它是自由格式的。 HttpClient使用HttpRequest来表示请求,使用serializeBody method转换请求正文:

  

将自由格式体转换为适合传输到服务器的序列化格式。

它接受许多体型,所有体型都相应地进行了字符串化。原始主体应为BlobArrayBuffer或字符串。因此Uint8Array应转换为其中之一,例如:

const arr: Uint8Array = LoginRequest.encode(message).finish();
const buffer: ArrayBuffer = arr.buffer;

答案 1 :(得分:0)

这对我有用

this.httpClient.post('.../service/', new Blob([gzip(JSON.stringify(obj))]), 

它已在A7应用中使用,尽管代码仍包含相同的注释

答案 2 :(得分:-1)

使用HttpClient.request传递HttpRequest来构建您想要的任何请求。

API docs