{"id":129075,"date":"2024-12-27T17:23:00","date_gmt":"2024-12-27T15:23:00","guid":{"rendered":"https:\/\/www.javacodegeeks.com\/?p=129075"},"modified":"2024-12-20T15:42:14","modified_gmt":"2024-12-20T13:42:14","slug":"getting-started-with-the-java-s3proxy-library","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/getting-started-with-the-java-s3proxy-library.html","title":{"rendered":"Getting Started with the Java S3Proxy Library"},"content":{"rendered":"<p>S3Proxy is an open-source and highly customizable proxy server that enables developers to emulate Amazon S3 storage locally. It provides an S3-compatible API that allows us to test and develop applications requiring object storage without depending on an actual AWS S3 environment. With S3Proxy, we can integrate backend storage systems like local filesystems or databases and access them using the same S3 API calls your application uses in production. This article explores how to use the S3Proxy library to run S3Proxy in a local environment.<\/p>\n<h2 class=\"wp-block-heading\">1. How S3Proxy Works<\/h2>\n<p>S3Proxy acts as a middleware between our application and various storage backends by emulating the Amazon S3 API. When our application sends S3-compatible requests (such as uploading or retrieving objects), S3Proxy intercepts these requests and translates them into operations supported by the configured storage backend. This allows us to interact with local or cloud-based storage systems using familiar S3 commands and tools.<\/p>\n<p>Here is an explanation of how S3Proxy works:<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>API Emulation<\/strong>: S3Proxy listens for requests using the S3 API (e.g., <code>PUT<\/code>, <code>GET<\/code>, <code>DELETE<\/code>) over HTTP or HTTPS. It interprets these requests and maps them to the underlying storage backend.<\/li>\n<li><strong>Backend Configuration<\/strong>: Storage backends like local filesystems, Google Cloud Storage, OpenStack Swift, Microsoft Azure Blob Storage, or Ceph RADOS Gateway are configured in the <code>s3proxy.conf<\/code> file. S3Proxy translates S3 operations into backend-specific actions.<\/li>\n<li><strong>Request Handling<\/strong>: Incoming S3 requests, such as uploading files (<code>PUT<\/code> object) or fetching files (<code>GET<\/code> object), are processed by S3Proxy. For instance, an upload request might write the file to the local filesystem if it is configured as the backend.<\/li>\n<li><strong>Security and Access Control<\/strong>: S3Proxy can be configured with credentials to authenticate requests, ensuring only authorized access. For example, it can use static credentials or mimic AWS authentication to validate requests.<\/li>\n<li><strong>Local Development and Testing<\/strong>: By running S3Proxy locally, developers can emulate S3 interactions without needing access to AWS. Applications interact with S3Proxy as if it were a live S3 service, enabling seamless testing and debugging.<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">1.1 Example Workflow<\/h3>\n<p>Here is an example of how S3Proxy processes a file upload request when the local filesystem is used as the backend:<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>Application<\/strong>: The application sends a <code>PUT<\/code> request to S3Proxy with the object data.<\/li>\n<li><strong>S3Proxy<\/strong>: It receives the request and verifies the credentials if authentication is enabled.<\/li>\n<li><strong>Translation<\/strong>: S3Proxy translates the <code>PUT<\/code> request into a file write operation in the specified directory of the local filesystem.<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\">2. Using S3Proxy in Java Applications<\/h2>\n<p>To use S3Proxy in your Java project, include the following Maven dependency:<\/p>\n<pre class=\"brush:xml\">\n        &lt;dependency&gt;\n            &lt;groupId&gt;org.gaul&lt;\/groupId&gt;\n            &lt;artifactId&gt;s3proxy&lt;\/artifactId&gt;\n            &lt;version&gt;2.3.0&lt;\/version&gt;\n        &lt;\/dependency&gt;\n        &lt;dependency&gt;\n            &lt;groupId&gt;software.amazon.awssdk&lt;\/groupId&gt;\n            &lt;artifactId&gt;s3&lt;\/artifactId&gt;\n            &lt;version&gt;2.28.23&lt;\/version&gt;\n        &lt;\/dependency&gt;\n<\/pre>\n<p>S3Proxy (<code>org.gaul:s3proxy<\/code>) offers a locally hosted endpoint that emulates the Amazon S3 API, while the AWS SDK for S3 (<code>software.amazon.awssdk:s3<\/code>) provides the tools to interact with this endpoint as though it were a real S3 service, making this combination ideal for local development and testing without needing an AWS account.<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<h3 class=\"wp-block-heading\">2.1 Sample Java Code for Using S3Proxy<\/h3>\n<p>The following code example demonstrates how to configure and use <strong>S3Proxy<\/strong> along with AWS SDK&#8217;s <code>S3Client<\/code> to interact with it.<\/p>\n<pre class=\"brush:java\">\npublic class S3ProxyExample {\n\n    public static void main(String[] args) throws Exception {\n        \/\/ Configure the backend BlobStore\n        Properties properties = new Properties();\n        properties.setProperty(\"jclouds.filesystem.basedir\", \"\/tmp\/s3proxy\");\n\n        BlobStoreContext context = ContextBuilder\n                .newBuilder(\"filesystem\")\n                .credentials(\"identity\", \"credential\")\n                .overrides(properties)\n                .build(BlobStoreContext.class);\n        BlobStore blobStore = context.getBlobStore();\n\n        \/\/ Configure and start S3Proxy\n        S3Proxy s3Proxy = S3Proxy.builder()\n                .blobStore(blobStore)\n                .endpoint(URI.create(\"http:\/\/127.0.0.1:8080\"))\n                .build();\n        s3Proxy.start();\n\n        \/\/ Wait for S3Proxy to start\n        while (!s3Proxy.getState().equals(AbstractLifeCycle.STARTED)) {\n            Thread.sleep(100);\n        }\n        System.out.println(\"S3Proxy started at: \" + s3Proxy.getState());\n\n        \/\/ Configure S3Client\n        S3Client s3Client = S3Client.builder()\n                .endpointOverride(URI.create(\"http:\/\/127.0.0.1:8080\"))\n                .region(Region.US_EAST_1)\n                .credentialsProvider(StaticCredentialsProvider.create(\n                        AwsBasicCredentials.create(\"access\", \"secret\")))\n                .build();\n\n        \/\/ Perform S3 Operations\n        String bucketName = \"test-bucket\";\n        s3Client.createBucket(CreateBucketRequest.builder().bucket(bucketName).build());\n        System.out.println(\"Bucket created: \" + bucketName);\n\n        String key = \"example.txt\";\n        String content = \"Hello, S3Proxy!\";\n        s3Client.putObject(PutObjectRequest.builder()\n                .bucket(bucketName)\n                .key(key)\n                .build(),\n                RequestBody.fromBytes(content.getBytes()));\n        System.out.println(\"File uploaded: \" + key);\n\n        \/\/ Verify the upload\n        List&lt;S3Object&gt; summaries = s3Client.listObjects(request\n                -&gt; request.bucket(bucketName)\n        ).contents();\n        summaries.forEach(summary -&gt; System.out.println(\"File in bucket: \" + summary.key()));\n\n        String downloadedContent = s3Client.getObject(\n                GetObjectRequest.builder()\n                        .bucket(bucketName)\n                        .key(key)\n                        .build(),\n                ResponseTransformer.toBytes()).asUtf8String();\n        System.out.println(\"Downloaded content: \" + downloadedContent);\n\n        \/\/ Shutdown the proxy\n        s3Proxy.stop();\n        System.out.println(\"S3Proxy stopped.\");\n    }\n}\n\n<\/pre>\n<p>The following section provides a detailed explanation and overview of the example code above:<\/p>\n<p><strong>Configure the Backend BlobStore<\/strong><\/p>\n<pre class=\"brush:java\">\nProperties properties = new Properties();\nproperties.setProperty(\"jclouds.filesystem.basedir\", \"\/tmp\/s3proxy\");\n\nBlobStoreContext context = ContextBuilder\n        .newBuilder(\"filesystem\")\n        .credentials(\"identity\", \"credential\")\n        .overrides(properties)\n        .build(BlobStoreContext.class);\nBlobStore blobStore = context.getBlobStore();\n\n<\/pre>\n<p>The purpose of this step is to configure a <code>BlobStore<\/code> to serve as the storage backend for S3Proxy. The key configuration includes setting <code>jclouds.filesystem.basedir<\/code> to specify the local directory (<code>\/tmp\/s3proxy<\/code>) for storing objects. Using <code>ContextBuilder<\/code>, a <code>BlobStoreContext<\/code> is created for the &#8220;filesystem&#8221; provider with dummy credentials (<code>identity<\/code> and <code>credential<\/code>). As a result, a <code>BlobStore<\/code> instance is created to interact with the backend storage.<\/p>\n<p><strong>Start S3Proxy<\/strong><\/p>\n<pre class=\"brush:java\">\nS3Proxy s3Proxy = S3Proxy.builder()\n        .blobStore(blobStore)\n        .endpoint(URI.create(\"http:\/\/127.0.0.1:8080\"))\n        .build();\ns3Proxy.start();\n\nwhile (!s3Proxy.getState().equals(AbstractLifeCycle.STARTED)) {\n    Thread.sleep(100);\n}\nSystem.out.println(\"S3Proxy started at: \" + s3Proxy.getState());\n\n<\/pre>\n<p>The purpose of this step is to configure and launch the S3Proxy server. Using <code>S3Proxy.builder()<\/code>, the server is set up to utilize the previously initialized <code>BlobStore<\/code> and bind it to the specified endpoint (<code>http:\/\/127.0.0.1:8080<\/code>). The <code>s3Proxy.start()<\/code> method is then called to start the server.<\/p>\n<p><strong>Configure the S3Client<\/strong><\/p>\n<pre class=\"brush:java\">\nS3Client s3Client = S3Client.builder()\n        .endpointOverride(URI.create(\"http:\/\/127.0.0.1:8080\"))\n        .region(Region.US_EAST_1)\n        .credentialsProvider(StaticCredentialsProvider.create(\n                AwsBasicCredentials.create(\"access\", \"secret\")))\n        .build();\n\n<\/pre>\n<p>In the above code fragment, an <code>S3Client<\/code> instance is created to work with the S3Proxy endpoint. It is configured with the local S3Proxy address (<code>endpointOverride<\/code>), simple static credentials (&#8220;access&#8221; and &#8220;secret&#8221;), and an AWS region (though not strictly needed for S3Proxy). This setup provides a fully configured <code>S3Client<\/code> for performing S3 operations.<\/p>\n<p><strong>Perform S3 Operations<\/strong><\/p>\n<pre class=\"brush:java\">\nString bucketName = \"test-bucket\";\ns3Client.createBucket(CreateBucketRequest.builder().bucket(bucketName).build());\n\nString key = \"example.txt\";\nString content = \"Hello, S3Proxy!\";\ns3Client.putObject(PutObjectRequest.builder()\n        .bucket(bucketName)\n        .key(key)\n        .build(),\n        RequestBody.fromBytes(content.getBytes()));\n\nList&lt;S3Object&gt; summaries = s3Client.listObjects(request\n        -&gt; request.bucket(bucketName)\n).contents();\n\nString downloadedContent = s3Client.getObject(\n        GetObjectRequest.builder()\n                .bucket(bucketName)\n                .key(key)\n                .build(),\n        ResponseTransformer.toBytes()).asUtf8String();\nSystem.out.println(\"Downloaded content: \" + downloadedContent);\n<\/pre>\n<p>In the above code fragment, we demonstrate how to interact with the S3Proxy server using the <code>S3Client<\/code>. First, a bucket named <code>test-bucket<\/code> is created to serve as a storage container. Next, a file named <code>example.txt<\/code> is uploaded to the bucket with the content <code>\"Hello, S3Proxy!\"<\/code>. The bucket&#8217;s contents are then listed, displaying all stored files. Finally, the uploaded file is downloaded, and its content is retrieved to verify that it matches the original data, ensuring the upload and retrieval processes were successful. <\/p>\n<p>These operations highlight how S3Proxy can replicate typical S3 functionality for development and testing purposes.<\/p>\n<h2 class=\"wp-block-heading\">3. Conclusion<\/h2>\n<p>In this article, we explored how to set up and use S3Proxy, a Java library that mimics Amazon S3 functionality locally for development and testing. We walked through configuring a <code>BlobStore<\/code> backend, starting the S3Proxy server, and performing basic S3 operations such as creating a bucket, uploading files, listing bucket contents, and downloading files using <code>S3Client<\/code>. This setup enables us to test and build S3-compatible applications without incurring AWS costs or requiring an active internet connection.<\/p>\n<p>Beyond <a href=\"https:\/\/www.javacodegeeks.com\/2017\/03\/amazon-s3-tutorial.html\" target=\"_blank\" rel=\"noreferrer noopener\">Amazon S3<\/a> compatibility, S3Proxy also supports other storage backends, including <a href=\"https:\/\/cloud.google.com\/storage\" target=\"_blank\" rel=\"noreferrer noopener\">Google Cloud Storage<\/a>, <a href=\"https:\/\/wiki.openstack.org\/wiki\/Swift\" target=\"_blank\" rel=\"noreferrer noopener\">OpenStack Swift<\/a>, <a href=\"https:\/\/azure.microsoft.com\/en-us\/products\/storage\/blobs\" target=\"_blank\" rel=\"noreferrer noopener\">Microsoft Azure Blob Storage<\/a>, and <a href=\"https:\/\/docs.ceph.com\/en\/reef\/radosgw\/\" target=\"_blank\" rel=\"noreferrer noopener\">Ceph RADOS Gateway<\/a>, making it a versatile solution for integrating and testing with various storage systems.<\/p>\n<h2 class=\"wp-block-heading\">4. Download the Source Code<\/h2>\n<p>This article explored the Java S3Proxy library.<\/p>\n<div class=\"download\"><strong>Download<\/strong><br \/>\nYou can download the full source code of this example here: <a href=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2024\/12\/java-s3proxy-example.zip\"><strong>Java s3proxy library<\/strong><\/a>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>S3Proxy is an open-source and highly customizable proxy server that enables developers to emulate Amazon S3 storage locally. It provides an S3-compatible API that allows us to test and develop applications requiring object storage without depending on an actual AWS S3 environment. With S3Proxy, we can integrate backend storage systems like local filesystems or databases &hellip;<\/p>\n","protected":false},"author":128888,"featured_media":129629,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[3262,3261,3263,3260],"class_list":["post-129075","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-amazon-s3","tag-java-s3proxy-library","tag-local-s3-testing","tag-s3proxy"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Getting Started with the Java S3Proxy Library - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Learn how to use the Java S3Proxy library for local S3 testing with complete Spring Boot examples and configurations.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/getting-started-with-the-java-s3proxy-library.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Getting Started with the Java S3Proxy Library - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Learn how to use the Java S3Proxy library for local S3 testing with complete Spring Boot examples and configurations.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/getting-started-with-the-java-s3proxy-library.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:author\" content=\"https:\/\/web.facebook.com\/omos.aziegbe\" \/>\n<meta property=\"article:published_time\" content=\"2024-12-27T15:23:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2024\/12\/s3proxy-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Omozegie Aziegbe\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/OAziegbe\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Omozegie Aziegbe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/getting-started-with-the-java-s3proxy-library.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/getting-started-with-the-java-s3proxy-library.html\"},\"author\":{\"name\":\"Omozegie Aziegbe\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/7d3eac6e45542536e961129ae0fb453e\"},\"headline\":\"Getting Started with the Java S3Proxy Library\",\"datePublished\":\"2024-12-27T15:23:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/getting-started-with-the-java-s3proxy-library.html\"},\"wordCount\":928,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/getting-started-with-the-java-s3proxy-library.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2024\\\/12\\\/s3proxy-logo.jpg\",\"keywords\":[\"Amazon S3\",\"Java S3Proxy Library\",\"Local S3 Testing\",\"S3Proxy\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/getting-started-with-the-java-s3proxy-library.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/getting-started-with-the-java-s3proxy-library.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/getting-started-with-the-java-s3proxy-library.html\",\"name\":\"Getting Started with the Java S3Proxy Library - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/getting-started-with-the-java-s3proxy-library.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/getting-started-with-the-java-s3proxy-library.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2024\\\/12\\\/s3proxy-logo.jpg\",\"datePublished\":\"2024-12-27T15:23:00+00:00\",\"description\":\"Learn how to use the Java S3Proxy library for local S3 testing with complete Spring Boot examples and configurations.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/getting-started-with-the-java-s3proxy-library.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/getting-started-with-the-java-s3proxy-library.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/getting-started-with-the-java-s3proxy-library.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2024\\\/12\\\/s3proxy-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2024\\\/12\\\/s3proxy-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/getting-started-with-the-java-s3proxy-library.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Getting Started with the Java S3Proxy Library\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/7d3eac6e45542536e961129ae0fb453e\",\"name\":\"Omozegie Aziegbe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/cropped-jcg_profile_pic-96x96.jpg\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/cropped-jcg_profile_pic-96x96.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/cropped-jcg_profile_pic-96x96.jpg\",\"caption\":\"Omozegie Aziegbe\"},\"description\":\"Omos Aziegbe is a technical writer and web\\\/application developer with a BSc in Computer Science and Software Engineering from the University of Bedfordshire. Specializing in Java enterprise applications with the Jakarta EE framework, Omos also works with HTML5, CSS, and JavaScript for web development. As a freelance web developer, Omos combines technical expertise with research and writing on topics such as software engineering, programming, web application development, computer science, and technology.\",\"sameAs\":[\"https:\\\/\\\/web.facebook.com\\\/omos.aziegbe\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/omosaziegbe\\\/\",\"https:\\\/\\\/x.com\\\/https:\\\/\\\/twitter.com\\\/OAziegbe\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/omozegie-aziegbe\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Getting Started with the Java S3Proxy Library - Java Code Geeks","description":"Learn how to use the Java S3Proxy library for local S3 testing with complete Spring Boot examples and configurations.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/getting-started-with-the-java-s3proxy-library.html","og_locale":"en_US","og_type":"article","og_title":"Getting Started with the Java S3Proxy Library - Java Code Geeks","og_description":"Learn how to use the Java S3Proxy library for local S3 testing with complete Spring Boot examples and configurations.","og_url":"https:\/\/www.javacodegeeks.com\/getting-started-with-the-java-s3proxy-library.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_author":"https:\/\/web.facebook.com\/omos.aziegbe","article_published_time":"2024-12-27T15:23:00+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2024\/12\/s3proxy-logo.jpg","type":"image\/jpeg"}],"author":"Omozegie Aziegbe","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/OAziegbe","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Omozegie Aziegbe","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/getting-started-with-the-java-s3proxy-library.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/getting-started-with-the-java-s3proxy-library.html"},"author":{"name":"Omozegie Aziegbe","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/7d3eac6e45542536e961129ae0fb453e"},"headline":"Getting Started with the Java S3Proxy Library","datePublished":"2024-12-27T15:23:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/getting-started-with-the-java-s3proxy-library.html"},"wordCount":928,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/getting-started-with-the-java-s3proxy-library.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2024\/12\/s3proxy-logo.jpg","keywords":["Amazon S3","Java S3Proxy Library","Local S3 Testing","S3Proxy"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/getting-started-with-the-java-s3proxy-library.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/getting-started-with-the-java-s3proxy-library.html","url":"https:\/\/www.javacodegeeks.com\/getting-started-with-the-java-s3proxy-library.html","name":"Getting Started with the Java S3Proxy Library - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/getting-started-with-the-java-s3proxy-library.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/getting-started-with-the-java-s3proxy-library.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2024\/12\/s3proxy-logo.jpg","datePublished":"2024-12-27T15:23:00+00:00","description":"Learn how to use the Java S3Proxy library for local S3 testing with complete Spring Boot examples and configurations.","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/getting-started-with-the-java-s3proxy-library.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/getting-started-with-the-java-s3proxy-library.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/getting-started-with-the-java-s3proxy-library.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2024\/12\/s3proxy-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2024\/12\/s3proxy-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/getting-started-with-the-java-s3proxy-library.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"Getting Started with the Java S3Proxy Library"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/7d3eac6e45542536e961129ae0fb453e","name":"Omozegie Aziegbe","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2023\/12\/cropped-jcg_profile_pic-96x96.jpg","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2023\/12\/cropped-jcg_profile_pic-96x96.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2023\/12\/cropped-jcg_profile_pic-96x96.jpg","caption":"Omozegie Aziegbe"},"description":"Omos Aziegbe is a technical writer and web\/application developer with a BSc in Computer Science and Software Engineering from the University of Bedfordshire. Specializing in Java enterprise applications with the Jakarta EE framework, Omos also works with HTML5, CSS, and JavaScript for web development. As a freelance web developer, Omos combines technical expertise with research and writing on topics such as software engineering, programming, web application development, computer science, and technology.","sameAs":["https:\/\/web.facebook.com\/omos.aziegbe","https:\/\/www.linkedin.com\/in\/omosaziegbe\/","https:\/\/x.com\/https:\/\/twitter.com\/OAziegbe"],"url":"https:\/\/www.javacodegeeks.com\/author\/omozegie-aziegbe"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/129075","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/128888"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=129075"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/129075\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/129629"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=129075"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=129075"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=129075"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}