记一次java后端访问远程服务,返回文件流的接收类型。restTemplate.exchange接收文件流

举报
object 发表于 2022/07/28 11:00:50 2022/07/28
【摘要】 之前也介绍过突然接到一个需求,需要远程访问get,无法携带header。记一次restTemplate.getForEntity携带headers失败,restTemplate. exchange-云社区-华为云 (huaweicloud.com)最终的需求目的是,下载一个文件,是一个pdf文件,我需要解析pdf,获取到pdf中某些关键信息用以业务需求。问题的关键是如何合理的接收返回的文件流...

之前也介绍过突然接到一个需求,需要远程访问get,无法携带header。

记一次restTemplate.getForEntity携带headers失败,restTemplate. exchange-云社区-华为云 (huaweicloud.com)

最终的需求目的是,下载一个文件,是一个pdf文件,我需要解析pdf,获取到pdf中某些关键信息用以业务需求。问题的关键是如何合理的接收返回的文件流。

Content-Type:application/octet-stream;charset=UTF-8 返回类型

响应头出现该类型,表明返回内容为一个二进制文件流,用以告知浏览器端进行相应的展示,如直接下载。

但是java后端如果是该类型的返回值,我们又该如何接收呢,String? inputStream? 具体的类?

以上试过,都不会符合要求,出现类型不匹配的异常no suit able content type xxx

org.springframework.core.io.Resource类接受

具体代码展示如下:

// resource 接受流
ResponseEntity<Resource> responseEntity = restTemplate.exchange(url,
        HttpMethod.GET, entity, Resource.class, new Object[0]);


// 直接根据resource获取流,进行文件操作
try(InputStream inputStream = responseEntity.getBody().getInputStream()) {
       PDDocument load = PDDocument.load(inputStream);
       PDFTextStripper pdfTextStripper = new PDFTextStripper();
       String text = pdfTextStripper.getText(load);
} catch (IOException e) {
       e.printStackTrace();
}

这样的话,就能直接接受,并直接获取流,还有一些封装的工具,如获取文件名,获取文件大小,获取文件流,就很方便。之后遇到相似的场景就不至于怎么处理了。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。