热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Angular5HttpClient发布原始二进制数据

如何解决《Angular5HttpClient发布原始二进制数据》经验,为你挑选了1个好方法。

我的WebApp需要通过ProtBuf与我的服务器通信。为此,我需要能够发布原始二进制数据。

这是我现在正在使用的代码。这个问题是HttpClient将Uint8Array编码为JSON数组,因此结果不再是有效的原型缓冲区:

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接受一些选项,在这里可以设置responseTypejsontextblobarraybuffer。但这只是设置了预期的响应类型,请求的主体仍被编码为JSON。

是否HttpClient可以发送未编码的正文?

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

{"0":10,"1":3,"2":97,"3":98,"4":99,"5":18,"6":5,"7":97,"8":100,"9":109,"10":105,"11":110,"12":26,"13":8,"14":112,"15":97,"16":115,"17":115,"18":119,"19":111,"20":114,"21":100}



1> Estus Flask..:

从参考资料中可以看出,请求的类型bodyany,这表明它是自由格式的。HttpClient用于HttpRequest表示请求,使用serializeBody方法转换请求主体:

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

它接受多种身体类型,所有身体类型都相应地进行了字符串化处理。原体有望成为BlobArrayBuffer或者一个字符串。因此Uint8Array应将其转换为其中之一,例如:

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


推荐阅读
author-avatar
罗然8_907
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有