我正在尝试将s3桶文件添加到zip中。s3桶中的文件为binary/octet-stream格式
当我运行下面的方法
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();
}
}
}
当执行ioutil .copy时抛出下面的IO Exception方法
"exception": "以Content-Length分隔的消息正文过早结束(期望:206,034;收到:0)">
有什么建议我如何处理这个或我做错了什么?谢谢你。
编辑:-@LeeGreiner我像这样得到InputStream:
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文件中。