【Java】S3にファイルをzipファイル化しアップロードする!

ファイルをzipファイル化し、それをAmazon S3にアップロードしたい!というのはよくあるでしょう

Javaで実装するにはAWS SDK for Javaを使用することが一般的です!

以下は実行するための基本的なコード例になります

AWS SDK for Javaをプロジェクトに追加します!

Mavenプロジェクトの場合(pom.xml)

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-s3</artifactId>
    <version>1.12.147</version> <!-- 最新のバージョンを選択してください -->
</dependency>

Gradleプロジェクトの場合(build.gradle)

dependencies {
    implementation 'com.amazonaws:aws-java-sdk-s3:1.12.147' // 最新のバージョンを選択してください
}

Javaの実装例

import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.PutObjectRequest;

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class Main {
    public static void main(String[] args) {
        // AWSの認証情報を設定します(Access KeyとSecret Access Key)
        String accessKey = "YOUR_ACCESS_KEY";
        String secretKey = "YOUR_SECRET_KEY";

        // S3のバケット名とアップロードするファイルパス
        String bucketName = "YOUR_BUCKET_NAME";
        String filePath = "PATH_TO_YOUR_FILE";

        // zipファイルの名前とS3にアップロードするパス
        String zipFileName = "yourfile.zip";
        String s3Key = "folder/" + zipFileName; // S3に保存する場所を指定します

        // S3クライアントを初期化します
        BasicAWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
        AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                .withCredentials(new AWSStaticCredentialsProvider(credentials))
                .build();

        try {
            // ファイルをzip化します
            zipFile(filePath, zipFileName);

            // S3にzipファイルをアップロードします
            File zipFile = new File(zipFileName);
            s3Client.putObject(new PutObjectRequest(bucketName, s3Key, zipFile));
            System.out.println("File uploaded to S3 successfully!");
        } catch (IOException | AmazonServiceException | SdkClientException e) {
            e.printStackTrace();
        }
    }

    // 指定されたファイルパスのファイルをZIP形式に圧縮します
    private static void zipFile(String sourceFilePath, String zipFileName) throws IOException {
        // 新しいZIPファイルを作成
        FileOutputStream fos = new FileOutputStream(zipFileName);

        // ZIP形式のストリームを作成
        ZipOutputStream zipOut = new ZipOutputStream(fos);

        // 圧縮対象のファイル
        File fileToZip = new File(sourceFilePath);

        zipFile(fileToZip, fileToZip.getName(), zipOut);
        zipOut.close();
        fos.close();
    }

    // 指定されたファイルをZIPファイル
    private static void zipFile(File fileToZip, String fileName, ZipOutputStream zipOut) throws IOException {
        // 隠しファイルの場合、true
        if (fileToZip.isHidden()) {
            return;
        }

        // ファイルがディレクトリである場合は、
        // ディレクトリを再帰的に処理してその中のすべてのファイルをZIPに追加
        if (fileToZip.isDirectory()) {
            if (fileName.endsWith("/")) {
                zipOut.putNextEntry(new ZipEntry(fileName));
                zipOut.closeEntry();
            } else {
                zipOut.putNextEntry(new ZipEntry(fileName + "/"));
                zipOut.closeEntry();
            }
            File[] children = fileToZip.listFiles();
            for (File childFile : children) {
                zipFile(childFile, fileName + "/" + childFile.getName(), zipOut);
            }
            return;
        }

        // FileInputStreamを使用してファイルの内容を読み込む
        FileInputStream fis = new FileInputStream(fileToZip);
        ZipEntry zipEntry = new ZipEntry(fileName);
        zipOut.putNextEntry(zipEntry);
        byte[] bytes = new byte[1024];
        int length;

        // 入力ファイルを読み込んでZIPに書き込む
        while ((length = fis.read(bytes)) >= 0) {
            zipOut.write(bytes, 0, length);
        }
        fis.close();
    }
}

このコードではzipFile() メソッドを使用してファイルをzip圧縮し、そしてS3にアップロードします

「AWSの認証情報」、「S3のバケット名」、「ファイルのパス」、そして「zipファイルの名前」は、それぞれの環境に合わせて値に置き換える必要があります

また、S3にアップロードする際の「キー(保存先のパス)」も適切に指定する必要がありますね

是非参考ください!

ではっ

是非フォローしてください

最新の情報をお伝えします