记一次java后端访问远程服务,返回文件流的接收类型。restTemplate.exchange接收文件流
【摘要】 之前也介绍过突然接到一个需求,需要远程访问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)