【问题标题】:How to extract tar files from amazonS3 bucket to another s3 in Java如何在 Java 中将 tar 文件从 amazonS3 存储桶提取到另一个 s3
【发布时间】:2021-05-27 05:08:15
【问题描述】:

我在 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);
            }
        }

【问题讨论】:

    标签: java amazon-web-services amazon-s3 byte inputstream


    【解决方案1】:

    尝试使用 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,请参考此Quick Start

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-15
      • 1970-01-01
      • 1970-01-01
      • 2018-06-02
      • 1970-01-01
      • 2017-04-14
      相关资源
      最近更新 更多