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