Skip to content

Instantly share code, notes, and snippets.

@aevans-mms
Created January 7, 2025 22:22
Show Gist options
  • Save aevans-mms/73ad4c7f6d4239e634caf99472ceaf72 to your computer and use it in GitHub Desktop.
Save aevans-mms/73ad4c7f6d4239e634caf99472ceaf72 to your computer and use it in GitHub Desktop.
package org.mms.qa.utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.GetObjectRequest;
import software.amazon.awssdk.services.s3.model.ListObjectsV2Request;
import software.amazon.awssdk.services.s3.model.S3Object;
import java.nio.file.Paths;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
public class AwsUtils {
static Logger log = LoggerFactory.getLogger(AwsUtils.class);
public AwsUtils(String profile, String region) {
System.setProperty("aws.profile", profile);
System.setProperty("aws.region", region);
}
public List<String> s3list(String bucket, String prefix) {
log.info("getting list of files in bucket `{}` with prefix `{}`", bucket, prefix);
var s3 = getS3Client();
var request = ListObjectsV2Request.builder()
.bucket(bucket)
.prefix(prefix)
.build();
var response = s3.listObjectsV2(request);
// sort by most recent
List<S3Object> sortedObjects = response.contents().stream()
.sorted(Comparator.comparing(S3Object::lastModified).reversed())
.collect(Collectors.toList());
// Get just the file names
List<String> sortedKeys = sortedObjects.stream()
.map(s3Object -> s3Object.key())
.collect(Collectors.toList());
return sortedKeys;
}
public void s3get(String bucket, String key, String downloadPath) {
log.info("download file from s3 bucket `{}` with key `{}` to local path `{}`", bucket, key, downloadPath);
var s3 = getS3Client();
var request = GetObjectRequest.builder()
.bucket(bucket)
.key(key)
.build();
var response = s3.getObject(request, Paths.get(downloadPath));
if (response.sdkHttpResponse().isSuccessful()) {
log.info("download succeeded");
} else {
log.info("download failed");
}
}
public S3Client getS3Client() {
return S3Client.builder()
.credentialsProvider(DefaultCredentialsProvider.create())
.build();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment