package de.thehomecraft.S3; import io.minio.*; import io.minio.messages.DeleteError; import io.minio.messages.DeleteObject; import io.minio.messages.Item; import java.io.File; import java.io.FileInputStream; import java.util.ArrayList; import java.util.List; import java.util.Objects; public class S3Uploader { public void uploadDirectory(File baseDir, File currentDir) throws Exception { MinioClient client = MinioClient.builder() .endpoint("http://85.214.239.211:9004") .credentials(new CredProvid().s3AccessKey, new CredProvid().s3SecretKey) .build(); for (File file : Objects.requireNonNull(currentDir.listFiles())) { if (file.isDirectory()) { uploadDirectory(baseDir, file); // recurse into subdirectories } else { //String objectName = baseDir.toPath().relativize(file.toPath()).toString().replace("\\", "/"); String objectName = file.getPath().substring(file.getPath().indexOf(baseDir.getName())).replaceAll("\\\\", "/"); System.out.println("Uploading: " + objectName); try (FileInputStream fis = new FileInputStream(file)) { client.putObject( PutObjectArgs.builder() .bucket("repofiles") .object(objectName) .stream(fis, file.length(), -1) .contentType("application/octet-stream") .build() ); } } } } public void deleteRemoteDirectory(String repoName) throws Exception { String bucketName = "repofiles"; MinioClient client = MinioClient.builder() .endpoint("http://85.214.239.211:9004") .credentials(new CredProvid().s3AccessKey, new CredProvid().s3SecretKey) .build(); System.out.println("Deleting "+repoName); String prefix = repoName+"/"; // List all objects under the given prefix Iterable> results = client.listObjects( ListObjectsArgs.builder() .bucket(bucketName) .prefix(prefix) .recursive(true) .build() ); boolean foundAny = false; for (Result result : results) { Item item = result.get(); String objectName = item.objectName(); try { client.removeObject( RemoveObjectArgs.builder() .bucket(bucketName) .object(objectName) .build() ); System.out.println("Deleted: " + objectName); foundAny = true; } catch (Exception e) { System.err.println("Failed to delete: " + objectName + " (" + e.getMessage() + ")"); } } if (!foundAny) { System.out.println("No objects found under prefix: " + prefix); } else { System.out.println("Finished deleting remote directory: " + prefix); } } }