如何使用RestTemplate进行远程调并从响应中获取多个文件?

问题描述

最近需要完成一个功能,即我使用RestTemplate 远程调用一个图片服务,这个服务会同时返回多张图片, 我如何从响应中获取多个流呢? 使用获取响应体再获取流的方式,就只有一个inputsteam,这个该如何区分多个文件呢?

try {

ResponseEntity<Resource> entity = restTemplate.postForEntity("", "", Resource.class);

entity.getBody().getFile();

InputStream inputStream = entity.getBody().getInputStream();

} catch (IOException e) {

e.printStackTrace();

}

//这种指定返回值泛型的方式可性吗?

ResponseEntity<MultipartFile> forEntity = restTemplate.getForEntity("url", MultipartFile.class, "param");

请各位大神帮我解答一下,谢谢


回答:

不清楚多张图片的背后逻辑,

  1. 多张图片在图片服务端,动态生成之后,返回给调用方。
  2. 多张已经生成好的静态图片,已经在文件服务器上部署ready,或者已经在CDN上,图片服务只是把文件整合返回给调用方。

我能想到的情况上述两点。

针对1的对策,在图片服务端动态生成多张图片,打包压缩gz或者zip,将压缩文件作为一个文件流传给调用方,调用方自行解压缩。

针对2的对策,相对复杂一下。图片服务的response流的自己组织协议,类似如下。
Section1: 000005 // 数字,表示返回五张图片
Section2: filename1.jpg // 第一个文件名,占空间1024 bytes,不足则用空格补满
Section3: 12345678901234567890 // 第一张图片的bytes数,不足则用0补满
Section4: xyzxyzxyzxyzxyz..... // 第一张图片的二进制内容流, 这部分长度为section3的数字
Section5: filename2.jpg
Section6: 12345678901234567890
Section7: xyzxyzxyz
以此类推,可根据需要自行加Section满足逻辑

调用方需要自行解析上述协议。

已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。

以上是 如何使用RestTemplate进行远程调并从响应中获取多个文件? 的全部内容, 来源链接: utcz.com/p/944491.html

回到顶部