如何使用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");

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

阅读 2.5k
1 个回答

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

  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 周年「问答」打卡 ,欢迎正在阅读的你也加入。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏