java - 将 HTTPResponse 正文中的字节流转换为 pdf 文件
问题描述
当我通过邮递员访问 API 时,我可以下载 pdf 文件。当我通过 java 代码访问相同的 API 时,我在 ResponseBody 中获得了 pdf 内容。而且我可以使用 responsebody 内容创建一个新的 pdf 文件,但是当我打开文件时它是空白的。
我的问题是如何创建一个与响应内容相同的新文件。
我试过了。转换响应的代码
file = new File("/home/abc.pdf");
outputStream = new BufferedOutputStream(new FileOutputStream(file));
if (!file.exists()) {
file.createNewFile();
}
byte[] contentInBytes = response.getBody().getBytes();
System.out.println(Arrays.toString(contentInBytes));
outputStream.write(contentInBytes);
outputStream.flush();
outputStream.close();
解决方案
在将其保存到文件之前创建一个临时byte[]
数组来存储整个响应主体是一种浪费。您想将响应写入InputStream
文件OutputStream
。
这可以通过几种方式完成,一种是使用 Guava,ByteStreams.copy()
例如:
try (OutputStream out = Files.newOutputStream(Paths.get("abc.pdf")) {
ByteStreams.copy(response.getBody(), out);
}
推荐阅读
- android - 检测 Android 设备中应用程序中的生物特征变化
- answer-set-programming - 如何在答案集编程(ASP Clingo)中找到倒数第二个值
- dialogflow-es - 如何在 DialogFlow 中使用训练短语
- c# - 来自资源的变量的字符串插值
- android - 应用内订阅不显示测试卡
- spring-boot - 在做@PutMapping的时候,不初始化数据怎么添加?
- android - 错误:用于调用 Google Play Developer API 的项目 ID 尚未在 Google Play Developer Console 中链接
- javascript - 用于选定值的 JQuery Bootstrap 多选插件
- python - 如何创建数据类型标识符?
- vue.js - 尝试在 apexchart Vue 中动态绑定 x 轴