
driven-adapter.s3-reactive.s3-operations.mustache Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of scaffold-clean-architecture Show documentation
Show all versions of scaffold-clean-architecture Show documentation
Gradle plugin to create a clean application in Java that already works, It follows our best practices!
package {{package}}.s3.operations;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
{{#lombok}}
import lombok.RequiredArgsConstructor;
{{/lombok}}
import software.amazon.awssdk.core.BytesWrapper;
import software.amazon.awssdk.core.async.AsyncRequestBody;
import software.amazon.awssdk.core.async.AsyncResponseTransformer;
import software.amazon.awssdk.services.s3.S3AsyncClient;
import software.amazon.awssdk.services.s3.model.DeleteObjectRequest;
import software.amazon.awssdk.services.s3.model.GetObjectRequest;
import software.amazon.awssdk.services.s3.model.ListObjectsRequest;
import software.amazon.awssdk.services.s3.model.ListObjectsResponse;
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
import software.amazon.awssdk.services.s3.model.S3Object;
import java.io.File;
import java.nio.ByteBuffer;
import java.util.List;
@Component
{{#lombok}}
@RequiredArgsConstructor
{{/lombok}}
public class S3Operations {
private final S3AsyncClient s3AsyncClient;
{{^lombok}}
public S3Operations(S3AsyncClient s3AsyncClient ) {
this.s3AsyncClient = s3AsyncClient;
}
{{/lombok}}
public Mono uploadObject(String bucketName,String objectKey, byte[] fileContent) {
return Mono.fromFuture(
s3AsyncClient.putObject(configurePutObject(bucketName,objectKey),
AsyncRequestBody.fromBytes(fileContent)))
.map(response -> response.sdkHttpResponse().isSuccessful());
}
public Mono uploadObject(String bucketName,String objectKey, String fileContent) {
return Mono.fromFuture(
s3AsyncClient.putObject(configurePutObject(bucketName,objectKey),
AsyncRequestBody.fromString(fileContent)))
.map(response -> response.sdkHttpResponse().isSuccessful());
}
public Mono uploadObject(String bucketName,String objectKey, File fileContent) {
return Mono.fromFuture(
s3AsyncClient.putObject(configurePutObject(bucketName,objectKey),
AsyncRequestBody.fromFile(fileContent)))
.map(response -> response.sdkHttpResponse().isSuccessful());
}
public Mono> listBucketObjects(String bucketName){
return Mono.fromFuture(s3AsyncClient.listObjects(ListObjectsRequest
.builder()
.bucket(bucketName)
.build()))
.map(ListObjectsResponse::contents);
}
public Flux getObject(String bucketName,String objectKey) {
return Mono.fromFuture(s3AsyncClient.getObject(GetObjectRequest.builder()
.key(objectKey)
.bucket(bucketName)
.build(), AsyncResponseTransformer.toPublisher()))
.flatMapMany(Flux::from);
}
public Mono deleteObject(String bucketName,String objectKey) {
return Mono.fromFuture(s3AsyncClient.deleteObject(DeleteObjectRequest.builder()
.key(objectKey)
.bucket(bucketName).build()))
.map(response -> response.sdkHttpResponse().isSuccessful());
}
private PutObjectRequest configurePutObject(String bucketName,String objectKey) {
return PutObjectRequest.builder()
.bucket(bucketName)
.key(objectKey)
.build();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy