diff --git a/pom.xml b/pom.xml index e471f9f..16dc86a 100644 --- a/pom.xml +++ b/pom.xml @@ -16,8 +16,8 @@ 0.1 - 23 - 23 + 21 + 21 UTF-8 2.31.47 @@ -27,24 +27,27 @@ software.amazon.awssdk s3 + ${s3.version} + compile + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + + org.springframework.boot + spring-boot-starter-jetty - - - - software.amazon.awssdk - s3 - ${s3.version} - - - - org.springframework.boot - spring-boot-starter-web - - - - diff --git a/src/main/java/ua/com/dxrkness/Main.java b/src/main/java/ua/com/dxrkness/Main.java index 7978128..e5fb446 100644 --- a/src/main/java/ua/com/dxrkness/Main.java +++ b/src/main/java/ua/com/dxrkness/Main.java @@ -1,18 +1,11 @@ package ua.com.dxrkness; -import software.amazon.awssdk.regions.Region; -import software.amazon.awssdk.services.s3.S3Client; - -import java.io.IOException; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +@SpringBootApplication public class Main { - public static void main(String[] args) throws IOException { - - final var s3 = S3Client.builder() - .region(Region.EU_CENTRAL_1) - .build(); - try (s3) { - s3.listBuckets().buckets().forEach(System.out::println); - } + public static void main(String[] args) { + SpringApplication.run(Main.class, args); } } \ No newline at end of file diff --git a/src/main/java/ua/com/dxrkness/S3Service.java b/src/main/java/ua/com/dxrkness/S3Service.java deleted file mode 100644 index 2eccecc..0000000 --- a/src/main/java/ua/com/dxrkness/S3Service.java +++ /dev/null @@ -1,41 +0,0 @@ -package ua.com.dxrkness; - -import software.amazon.awssdk.services.s3.S3Client; -import software.amazon.awssdk.services.s3.model.S3Object; - -import java.nio.file.Path; -import java.util.List; - -public class S3Service { - private final S3Client client; - private final String bucketName; - - public S3Service(S3Client client, String bucketName) { - this.client = client; - this.bucketName = bucketName; - } - - public void createDirectory(Path path) { - throw new UnsupportedOperationException(); - } - - public Boolean delete(Path path) { - return client - .deleteObject(b -> b.bucket(bucketName).key(path.toString()).build()) - .deleteMarker(); - } - - public List listing(Path path) { - return client - .listObjectsV2(b -> b.bucket(bucketName).build()) - .contents(); - } - - public void uploadFile(Path path) { - throw new UnsupportedOperationException(); - } - - public String downloadFile(Path path) { - throw new UnsupportedOperationException(); - } -} \ No newline at end of file diff --git a/src/main/java/ua/com/dxrkness/config/S3Configuration.java b/src/main/java/ua/com/dxrkness/config/S3Configuration.java new file mode 100644 index 0000000..71803ec --- /dev/null +++ b/src/main/java/ua/com/dxrkness/config/S3Configuration.java @@ -0,0 +1,16 @@ +package ua.com.dxrkness.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import software.amazon.awssdk.regions.Region; +import software.amazon.awssdk.services.s3.S3Client; + +@Configuration +public class S3Configuration { + @Bean + public S3Client client() { + return S3Client.builder() + .region(Region.EU_CENTRAL_1) + .build(); + } +} diff --git a/src/main/java/ua/com/dxrkness/controller/S3ControllerConfig.java b/src/main/java/ua/com/dxrkness/controller/S3ControllerConfig.java new file mode 100644 index 0000000..6a6802f --- /dev/null +++ b/src/main/java/ua/com/dxrkness/controller/S3ControllerConfig.java @@ -0,0 +1,17 @@ +package ua.com.dxrkness.controller; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.function.RouterFunction; +import org.springframework.web.servlet.function.RouterFunctions; +import org.springframework.web.servlet.function.ServerResponse; + +@Configuration +public class S3ControllerConfig { + @Bean + public RouterFunction router() { + return RouterFunctions.route() + .GET() + .build(); + } +} \ No newline at end of file diff --git a/src/main/java/ua/com/dxrkness/controller/S3FileHandler.java b/src/main/java/ua/com/dxrkness/controller/S3FileHandler.java new file mode 100644 index 0000000..4fd837f --- /dev/null +++ b/src/main/java/ua/com/dxrkness/controller/S3FileHandler.java @@ -0,0 +1,4 @@ +package ua.com.dxrkness.controller; + +public class S3FileHandler { +} diff --git a/src/main/java/ua/com/dxrkness/service/S3Service.java b/src/main/java/ua/com/dxrkness/service/S3Service.java new file mode 100644 index 0000000..ae755be --- /dev/null +++ b/src/main/java/ua/com/dxrkness/service/S3Service.java @@ -0,0 +1,59 @@ +package ua.com.dxrkness.service; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; +import software.amazon.awssdk.core.sync.RequestBody; +import software.amazon.awssdk.services.s3.S3Client; +import software.amazon.awssdk.services.s3.model.S3Object; + +import java.io.IOException; +import java.io.Reader; +import java.nio.channels.*; +import java.nio.charset.StandardCharsets; +import java.nio.file.Path; +import java.util.List; + +@Service +public class S3Service { + private final S3Client client; + private final String bucketName; + + public S3Service(S3Client client, + @Value("s3.bucket-name") String bucketName) { + this.client = client; + this.bucketName = bucketName; + } + + public void createDirectory(Path path) { + throw new UnsupportedOperationException(); + } + + public Boolean delete(Path path) { + return client + .deleteObject(b -> b.bucket(bucketName).key(path.toString()).build()) + .deleteMarker(); + } + + public List listing(Path path) { + return client + .listObjectsV2(b -> b.bucket(bucketName).build()) + .contents(); + } + + public Boolean uploadFile(MultipartFile file) throws IOException { + return client + .putObject(b -> b + .bucket(bucketName) + .key(file.getName()), + RequestBody.fromInputStream(file.getInputStream(), file.getSize())) + .bucketKeyEnabled(); + } + + public Reader downloadFile(String key, Path destinationPath) { + return Channels.newReader( + Channels.newChannel(client + .getObject(b -> b.bucket(bucketName).key(key))), + StandardCharsets.UTF_8); + } +} \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..e58267d --- /dev/null +++ b/src/main/resources/application.properties @@ -0,0 +1 @@ +s3.bucket-name=student-test-bucket-orlovos-2025 \ No newline at end of file