
com.clickntap.square.s3.S3 Maven / Gradle / Ivy
The newest version!
package com.clickntap.square.s3;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;
import java.nio.file.Paths;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
import software.amazon.awssdk.core.sync.RequestBody;
import software.amazon.awssdk.core.sync.ResponseTransformer;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.S3ClientBuilder;
import software.amazon.awssdk.services.s3.model.DeleteObjectRequest;
import software.amazon.awssdk.services.s3.model.GetObjectRequest;
import software.amazon.awssdk.services.s3.model.GetObjectResponse;
import software.amazon.awssdk.services.s3.model.HeadObjectRequest;
import software.amazon.awssdk.services.s3.model.HeadObjectResponse;
import software.amazon.awssdk.services.s3.model.ListObjectsRequest;
import software.amazon.awssdk.services.s3.model.ListObjectsResponse;
import software.amazon.awssdk.services.s3.model.ListObjectsV2Request;
import software.amazon.awssdk.services.s3.model.ListObjectsV2Response;
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
import software.amazon.awssdk.services.s3.model.PutObjectResponse;
import software.amazon.awssdk.services.s3.model.S3Object;
import software.amazon.awssdk.services.s3.presigner.S3Presigner;
import software.amazon.awssdk.services.s3.presigner.model.GetObjectPresignRequest;
import software.amazon.awssdk.services.s3.presigner.model.PresignedGetObjectRequest;
public class S3 {
private String accessKey;
private String secretKey;
private String bucketName;
private String region;
private S3Client client = null;
public void init() {
S3ClientBuilder builder = S3Client.builder().region(Region.of(getRegion()));
if (accessKey != null && secretKey != null) {
builder = builder.credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create(getAccessKey(), getSecretKey())));
}
client = builder.build();
}
public String getUrl() {
return getUrl(null);
}
public String getUrl(String key) {
try {
S3Presigner presigner = S3Presigner.builder().region(Region.of(getRegion())).build();
GetObjectPresignRequest getObjectPresignRequest = GetObjectPresignRequest.builder().getObjectRequest(r -> r.bucket(getBucketName()).key(key)).build();
PresignedGetObjectRequest presignedGetObjectRequest = presigner.presignGetObject(getObjectPresignRequest);
return presignedGetObjectRequest.url().toString();
} catch (Exception e) {
return null;
}
}
public PutObjectResponse upload(File file, String path) throws Exception {
PutObjectRequest request = PutObjectRequest.builder().bucket(getBucketName()).key(path).acl("public-read").build();
return client.putObject(request, RequestBody.fromFile(file));
}
public PutObjectResponse upload(byte[] bytes, String path, String contentType) throws Exception {
PutObjectRequest request = PutObjectRequest.builder().bucket(getBucketName()).contentType(contentType).key(path).acl("public-read").build();
return client.putObject(request, RequestBody.fromBytes(bytes));
}
public PutObjectResponse upload(InputStream in, String path, String contentType, long contentLength) throws Exception {
PutObjectRequest request = PutObjectRequest.builder().bucket(getBucketName()).key(path).contentType(contentType).contentLength(contentLength).acl("public-read").build();
return client.putObject(request, RequestBody.fromInputStream(in, contentLength));
}
public void delete(String path) {
DeleteObjectRequest request = DeleteObjectRequest.builder().bucket(getBucketName()).key(path).build();
client.deleteObject(request);
}
public List listObjects() {
ListObjectsRequest request = ListObjectsRequest.builder().bucket(getBucketName()).build();
ListObjectsResponse response = client.listObjects(request);
return response.contents().stream().map(S3Object::key).collect(Collectors.toList());
}
public List listObjects(String prefix) {
ListObjectsRequest request = ListObjectsRequest.builder().bucket(getBucketName()).prefix(prefix).build();
ListObjectsResponse response = client.listObjects(request);
return response.contents().stream().map(S3Object::key).collect(Collectors.toList());
}
public HeadObjectResponse getObjectMetadata(String path) {
HeadObjectRequest request = HeadObjectRequest.builder().bucket(getBucketName()).key(path).build();
return client.headObject(request);
}
public void download(String path, String destinationPath) throws Exception {
GetObjectRequest request = GetObjectRequest.builder().bucket(getBucketName()).key(path).build();
ResponseTransformer transformer = ResponseTransformer.toFile(Paths.get(destinationPath));
client.getObject(request, transformer);
}
public byte[] get(String path) throws Exception {
ByteArrayOutputStream out = new ByteArrayOutputStream();
GetObjectRequest request = GetObjectRequest.builder().bucket(getBucketName()).key(path).build();
ResponseTransformer transformer = ResponseTransformer.toOutputStream(out);
client.getObject(request, transformer);
return out.toByteArray();
}
public boolean isFolder(String path) {
ListObjectsV2Request request = ListObjectsV2Request.builder().bucket(getBucketName()).prefix(path.endsWith("/") ? path : path + "/").maxKeys(1).build();
ListObjectsV2Response response = client.listObjectsV2(request);
return response.contents().size() > 0 || response.commonPrefixes().size() > 0;
}
public String getAccessKey() {
return accessKey;
}
public void setAccessKey(String accessKey) {
this.accessKey = accessKey;
}
public String getSecretKey() {
return secretKey;
}
public void setSecretKey(String secretKey) {
this.secretKey = secretKey;
}
public String getBucketName() {
return bucketName;
}
public void setBucketName(String bucketName) {
this.bucketName = bucketName;
}
public String getRegion() {
return Optional.ofNullable(region).orElse("eu-west-1");
}
public void setRegion(String region) {
this.region = region;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy