{"id":19791803,"url":"https://github.com/making/simple-s3-client","last_synced_at":"2025-07-04T16:32:54.680Z","repository":{"id":211848874,"uuid":"730061009","full_name":"making/simple-s3-client","owner":"making","description":"A simple S3 Java Client that works with Spring RestTemplate or RestClient","archived":false,"fork":false,"pushed_at":"2025-01-23T21:48:44.000Z","size":167,"stargazers_count":5,"open_issues_count":4,"forks_count":1,"subscribers_count":3,"default_branch":"develop","last_synced_at":"2025-05-01T01:38:58.771Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/making.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-12-11T05:48:30.000Z","updated_at":"2024-12-09T19:53:17.000Z","dependencies_parsed_at":"2024-04-18T22:29:32.151Z","dependency_job_id":"46aae95c-4b6f-410f-801c-b4ee9d02ad1f","html_url":"https://github.com/making/simple-s3-client","commit_stats":null,"previous_names":["making/simple-s3-client"],"tags_count":5,"template":false,"template_full_name":"making/java-lib","purl":"pkg:github/making/simple-s3-client","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/making%2Fsimple-s3-client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/making%2Fsimple-s3-client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/making%2Fsimple-s3-client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/making%2Fsimple-s3-client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/making","download_url":"https://codeload.github.com/making/simple-s3-client/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/making%2Fsimple-s3-client/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263577244,"owners_count":23483130,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-12T07:04:55.805Z","updated_at":"2025-07-04T16:32:54.662Z","avatar_url":"https://github.com/making.png","language":"Java","readme":"# simple-s3-client\n\nA simple S3 Java Client that works with Spring `RestTemplate` or `RestClient`\n\n```xml\n\t\t\u003cdependency\u003e\n\t\t\t\u003cgroupId\u003eam.ik.s3\u003c/groupId\u003e\n\t\t\t\u003cartifactId\u003esimple-s3-client\u003c/artifactId\u003e\n\t\t\t\u003cversion\u003e0.2.2\u003c/version\u003e\n\t\t\u003c/dependency\u003e\n```\n\n## Examples with `RestTemplate`\n\nMake sure the `RestTemplate` has `MappingJackson2XmlHttpMessageConverter` to convert XML responses.\n\n\n```java\nimport static am.ik.s3.S3RequestBuilder.s3Request;\n\nURI endpoint = URI.create(\"https://...\");\nString region = \"...\";\nString accessKeyId = \"...\";\nString secretAccessKey = \"...\";\nString bucket = \"...\";\nRestTemplate restTempalte = ...;\n\n// Put a bucket\nS3Request putBucketRequest = s3Request().endpoint(endpoint)\n\t.region(region)\n\t.accessKeyId(accessKeyId)\n\t.secretAccessKey(secretAccessKey)\n\t.method(HttpMethod.PUT)\n\t.path(b -\u003e b.bucket(bucket))\n\t.build();\nrestTemplate.exchange(putBucketRequest.toEntityBuilder().build(), Void.class);\n\n// List buckets\nS3Request listBucketsRequest = s3Request().endpoint(endpoint)\n\t.region(region)\n\t.accessKeyId(accessKeyId)\n\t.secretAccessKey(secretAccessKey)\n\t.method(HttpMethod.GET)\n\t.path(b -\u003e b)\n\t.build();\nListBucketsResult bucketsResult = restTemplate\n\t.exchange(listBucketsRequest.toEntityBuilder().build(), ListBucketsResult.class)\n\t.getBody();\nSystem.out.println(bucketsResult);\n\n// Put an object\nString body = \"Hello World!\";\nS3Request putObjectRequest = s3Request().endpoint(endpoint)\n\t.region(region)\n\t.accessKeyId(accessKeyId)\n\t.secretAccessKey(secretAccessKey)\n\t.method(HttpMethod.PUT)\n\t.path(b -\u003e b.bucket(bucket).key(\"hello.txt\"))\n\t.content(S3Content.of(body, MediaType.TEXT_PLAIN))\n\t.build();\nrestTemplate.exchange(putObjectRequest.toEntityBuilder().body(body), Void.class);\n\n// List a bucket\nS3Request listBucketRequest = s3Request().endpoint(endpoint)\n\t.region(region)\n\t.accessKeyId(accessKeyId)\n\t.secretAccessKey(secretAccessKey)\n\t.method(HttpMethod.GET)\n\t.path(b -\u003e b.bucket(bucket))\n\t.build();\nListBucketResult bucketResult = restTemplate\n\t.exchange(listBucketRequest.toEntityBuilder().build(), ListBucketResult.class)\n\t.getBody();\nSystem.out.println(bucketResult);\n\n// Get an object\nS3Request getObjectRequest = s3Request().endpoint(endpoint)\n\t.region(region)\n\t.accessKeyId(accessKeyId)\n\t.secretAccessKey(secretAccessKey)\n\t.method(HttpMethod.GET)\n\t.path(b -\u003e b.bucket(bucket).key(\"hello.txt\"))\n\t.build();\nString response = restTemplate.exchange(getObjectRequest.toEntityBuilder().build(), String.class).getBody();\nSystem.out.println(\"Response: \" + response); // Response: Hello World!\n\n// Delete an object\nS3Request deleteObjectRequest = s3Request().endpoint(endpoint)\n\t.region(region)\n\t.accessKeyId(accessKeyId)\n\t.secretAccessKey(secretAccessKey)\n\t.method(HttpMethod.DELETE)\n\t.path(b -\u003e b.bucket(bucket).key(\"hello.txt\"))\n\t.build();\nrestTemplate.exchange(deleteObjectRequest.toEntityBuilder().build(), Void.class);\n\n// Delete a bucket\nS3Request deleteBucketRequest = s3Request().endpoint(endpoint)\n\t.region(region)\n\t.accessKeyId(accessKeyId)\n\t.secretAccessKey(secretAccessKey)\n\t.method(HttpMethod.DELETE)\n\t.path(b -\u003e b.bucket(bucket))\n\t.build();\nrestTemplate.exchange(deleteBucketRequest.toEntityBuilder().build(), Void.class);\n```\n\n## Examples with `RestClient`\n\nMake sure the `RestClient` has `MappingJackson2XmlHttpMessageConverter` to convert XML responses.\n\n```java\nimport static am.ik.s3.S3RequestBuilder.s3Request;\n\nURI endpoint = URI.create(\"https://...\");\nString region = \"...\";\nString accessKeyId = \"...\";\nString secretAccessKey = \"...\";\nString bucket = \"...\";\nRestClient restClient = ...;\n\n// Put a bucket\nS3Request putBucketRequest = s3Request().endpoint(endpoint)\n\t.region(region)\n\t.accessKeyId(accessKeyId)\n\t.secretAccessKey(secretAccessKey)\n\t.method(HttpMethod.PUT)\n\t.path(b -\u003e b.bucket(bucket))\n\t.build();\nrestClient.put().uri(putBucketRequest.uri()).headers(putBucketRequest.headers()).retrieve().toBodilessEntity();\n\n// List buckets\nS3Request listBucketsRequest = s3Request().endpoint(endpoint)\n\t.region(region)\n\t.accessKeyId(accessKeyId)\n\t.secretAccessKey(secretAccessKey)\n\t.method(HttpMethod.GET)\n\t.path(b -\u003e b)\n\t.build();\nListBucketsResult bucketsResult = restClient.get()\n\t.uri(listBucketsRequest.uri())\n\t.headers(listBucketsRequest.headers())\n\t.retrieve()\n\t.body(ListBucketsResult.class);\nSystem.out.println(bucketsResult);\n\n// Put an object\nString body = \"Hello World!\";\nS3Request putObjectRequest = s3Request().endpoint(endpoint)\n\t.region(region)\n\t.accessKeyId(accessKeyId)\n\t.secretAccessKey(secretAccessKey)\n\t.method(HttpMethod.PUT)\n\t.path(b -\u003e b.bucket(bucket).key(\"hello.txt\"))\n\t.content(S3Content.of(body, MediaType.TEXT_PLAIN))\n\t.build();\nrestClient.put()\n\t.uri(putObjectRequest.uri())\n\t.headers(putObjectRequest.headers())\n\t.body(body)\n\t.retrieve()\n\t.toBodilessEntity();\n\n// List a bucket\nS3Request listBucketRequest = s3Request().endpoint(endpoint)\n\t.region(region)\n\t.accessKeyId(accessKeyId)\n\t.secretAccessKey(secretAccessKey)\n\t.method(HttpMethod.GET)\n\t.path(b -\u003e b.bucket(bucket))\n\t.build();\nListBucketResult bucketResult = restClient.get()\n\t.uri(listBucketRequest.uri())\n\t.headers(listBucketRequest.headers())\n\t.retrieve()\n\t.body(ListBucketResult.class);\nSystem.out.println(bucketResult);\n\n// Get an object\nS3Request getObjectRequest = s3Request().endpoint(endpoint)\n\t.region(region)\n\t.accessKeyId(accessKeyId)\n\t.secretAccessKey(secretAccessKey)\n\t.method(HttpMethod.GET)\n\t.path(b -\u003e b.bucket(bucket).key(\"hello.txt\"))\n\t.build();\nString response = restClient.get()\n\t.uri(getObjectRequest.uri())\n\t.headers(getObjectRequest.headers())\n\t.retrieve()\n\t.body(String.class);\nSystem.out.println(\"Response: \" + response); // Response: Hello World!\n\n// Delete an object\nS3Request deleteObjectRequest = s3Request().endpoint(endpoint)\n\t.region(region)\n\t.accessKeyId(accessKeyId)\n\t.secretAccessKey(secretAccessKey)\n\t.method(HttpMethod.DELETE)\n\t.path(b -\u003e b.bucket(bucket).key(\"hello.txt\"))\n\t.build();\nrestClient.delete()\n\t.uri(deleteObjectRequest.uri())\n\t.headers(deleteObjectRequest.headers())\n\t.retrieve()\n\t.toBodilessEntity();\n\n// Delete a bucket\nS3Request deleteBucketRequest = s3Request().endpoint(endpoint)\n\t.region(region)\n\t.accessKeyId(accessKeyId)\n\t.secretAccessKey(secretAccessKey)\n\t.method(HttpMethod.DELETE)\n\t.path(b -\u003e b.bucket(bucket))\n\t.build();\nrestClient.delete()\n\t.uri(deleteBucketRequest.uri())\n\t.headers(deleteBucketRequest.headers())\n\t.retrieve()\n\t.toBodilessEntity();\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaking%2Fsimple-s3-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaking%2Fsimple-s3-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaking%2Fsimple-s3-client/lists"}