我的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
设置为responseType
,json
,text
或blob
。但这只是设置了预期的响应类型,请求的主体仍然被编码为JSON。
arraybuffer
是否有可能发送未编码的尸体?
编辑:这是我在服务器上收到的正文:
HttpClient
答案 0 :(得分:3)
正如在reference中可以看到的,请求body
的类型是any
,这表明它是自由格式的。 HttpClient
使用HttpRequest
来表示请求,使用serializeBody
method转换请求正文:
将自由格式体转换为适合传输到服务器的序列化格式。
它接受许多体型,所有体型都相应地进行了字符串化。原始主体应为Blob
,ArrayBuffer
或字符串。因此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
来构建您想要的任何请求。