【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にアップロードする際の「キー(保存先のパス)」も適切に指定する必要がありますね
是非参考ください!
ではっ
是非フォローしてください
最新の情報をお伝えします