add dependencies and start developing app

This commit is contained in:
2025-05-24 21:38:18 +03:00
parent bb6346f1da
commit fb3f79e468
8 changed files with 122 additions and 70 deletions

37
pom.xml
View File

@ -16,8 +16,8 @@
<version>0.1</version>
<properties>
<maven.compiler.release>23</maven.compiler.release>
<java.version>23</java.version>
<maven.compiler.release>21</maven.compiler.release>
<java.version>21</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<s3.version>2.31.47</s3.version>
@ -27,24 +27,27 @@
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
<version>${s3.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
<version>${s3.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>

View File

@ -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);
}
}

View File

@ -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<S3Object> 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();
}
}

View File

@ -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();
}
}

View File

@ -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<ServerResponse> router() {
return RouterFunctions.route()
.GET()
.build();
}
}

View File

@ -0,0 +1,4 @@
package ua.com.dxrkness.controller;
public class S3FileHandler {
}

View File

@ -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<S3Object> 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);
}
}

View File

@ -0,0 +1 @@
s3.bucket-name=student-test-bucket-orlovos-2025