如何将/zip binary/octet-stream s3内容保存到zip



我正在尝试将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文件中。

最新更新