我正在尝试将 s3 存储桶文件添加到 zip 中。 s3存储桶中的文件采用二进制/八位字节流格式。
当我运行以下方法时
public static void addFileToZip(ZipOutputStream zip, String fileName, InputStream fileContent) throws IOException {
try {
zip.putNextEntry(new ZipEntry(fileName));
IOUtils.copy(fileContent, zip);
zip.closeEntry();
} catch (IOException ioe) {
fileContent.close();
}
}
}
执行IOUtils.copy方法时抛出下面的IO异常
“异常”:“内容长度分隔的消息正文过早结束(预期:206,034;收到:0)”
关于如何处理这个问题或者我做错了什么有什么建议吗? 谢谢。
编辑:- @LeeGreiner 我得到这样的输入流:
public ResponseInputStream<GetObjectResponse> getObject(String key) {
try (S3Client s3 = s3Client.getClient()) {
return s3.getObject(
GetObjectRequest.builder()
.bucket(bucketName)
.key(key)
.build()
);
}
}
最佳答案
您可以使用 ResponseTransformer
将响应转换为输入流:
s3.getObject(getObjectRequest, ResponseTransformer.toInputStream());
我的具体方法如下(假设s3
连接已经创建):
public static InputStream getObject(String key) throws IOException {
GetObjectRequest getObjectRequest = GetObjectRequest.builder()
.bucket(bucketName)
.key(key)
.build();
return s3.getObject(getObjectRequest, ResponseTransformer.toInputStream());
}
然后可以按照通常的方式将生成的输入流添加到您的 zip 文件中。
关于java - 如何将二进制/八位字节流 s3 内容保存/压缩为 zip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69682181/