首页 > 解决方案 > 如何在 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);
            }
        }

标签: javaamazon-web-servicesamazon-s3byteinputstream

解决方案


尝试使用 V2 版本的 Amazon S3 Java API。当您使用有效数据正确设置 byte[] 时,我没有看到使用 PutObject 的问题。此外,请确保您正确设置了PutObjectRequest对象。请参阅此代码示例。

https://github.com/scmacdon/aws-doc-sdk-examples/blob/master/javav2/example_code/s3/src/main/java/com/example/s3/PutObject.java

如果您不熟悉 AWS SDK for Java V2,请参阅此快速入门


推荐阅读