java - 如何在 Java 中将 tar 文件从 amazonS3 存储桶提取到另一个 s3
问题描述
我在 S3 存储桶中有 tar 文件,我正试图在另一个 s3 存储桶中解压它们。到目前为止,我得到了 destBucket 中的所有文件,但似乎 putObject 使文件损坏或为空。如何读取整个文件并将整个缓冲写入 putObject ?
这是我正在使用的代码:
TarArchiveInputStream tarInputStream = new TarArchiveInputStream(new BufferedInputStream(objectData));
TarArchiveEntry currentEntry;
while ((currentEntry = tarInputStream.getNextTarEntry()) != null) {
if (!currentEntry.isDirectory()) {
byte[] objectBytes = new byte[currentEntry.getSize()];
tarInputStream.read(objectBytes);
def entryName = currentEntry.getName()
def fileN = entryName.substring(entryName.lastIndexOf("/") + 1, entryName.length())
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(objectBytes.length);
metadata.setContentType("application/octet-stream");
s3Client.putObject(destbucket, packagePath + "untar_frames/" + fileN,
new ByteArrayInputStream(objectBytes), metadata);
}
}
解决方案
尝试使用 V2 版本的 Amazon S3 Java API。当您使用有效数据正确设置 byte[] 时,我没有看到使用 PutObject 的问题。此外,请确保您正确设置了PutObjectRequest对象。请参阅此代码示例。
如果您不熟悉 AWS SDK for Java V2,请参阅此快速入门。
推荐阅读
- java - 为合并列 IN 查询创建条件查询
- amazon-web-services - Cloud Formation Template:403,而文件是从私有 S3 复制的
- java - 如何在 Task1 、 Task2 、 Task3 类 run() 方法中为 threadArray 变量赋值?
- javascript - 警告:道具类型失败:提供给“ForwardRef(FormControl)”的“字符串”类型的无效道具“错误”,预期为“布尔”
- maven - 在构建时,maven 应在第 1 步和第 3 步调用 spring-boot-maven-plugin。我可以避免警告“发现插件的重复声明”吗?
- asp.net-mvc - 我的可搜索下拉列表视图不起作用 asp.net mvc
- java - 为什么这里没有调用我的重绘方法?
- wordpress - WordPress:Softacous - 无法写入配置文件 _htaccess
- reactjs - 反应状态值调用
- r - 神经网络:需要数字/复杂矩阵/向量参数