All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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