CARVIEW |
Select Language
HTTP/2 200
date: Sun, 20 Jul 2025 15:28:23 GMT
content-type: text/html; charset=utf-8
vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With,Accept-Encoding, Accept, X-Requested-With
x-robots-tag: none
etag: W/"a7222f0854601e38e996991037551802"
cache-control: max-age=0, private, must-revalidate
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 0
referrer-policy: no-referrer-when-downgrade
content-security-policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/
server: github.com
content-encoding: gzip
accept-ranges: bytes
set-cookie: _gh_sess=Ax31%2BxsXcx2WpMvm1zWgcYRXnRQQZurp1YUtE6JYYgsuMYea2GZ5mB6uaFXCM9ElG9LrIQAct9nBEXYDLxhVILhqOaG0YsUNVOHsH2PZOuNa%2B5mHZSh2n5sJII%2Baiy3mE2YpdPoCJcsPV1bxs7yVsO1B2BWCXdRmfyOvH09MJGhNWPZ792tUmvVBZxPhBRh2LeJpipIidVGiibWpQTdVp6M4BOAPVFCp3bQdp%2BBUmR%2B89UNpE4Ni73GmQLOfhGDBUOcMA%2Fly8MJ2DamDHsH%2Brw%3D%3D--41oycCURQhXQ%2FW5X--L9C%2B2CpBDxgxnwVMuLvkGQ%3D%3D; Path=/; HttpOnly; Secure; SameSite=Lax
set-cookie: _octo=GH1.1.1222070233.1753025302; Path=/; Domain=github.com; Expires=Mon, 20 Jul 2026 15:28:22 GMT; Secure; SameSite=Lax
set-cookie: logged_in=no; Path=/; Domain=github.com; Expires=Mon, 20 Jul 2026 15:28:22 GMT; HttpOnly; Secure; SameSite=Lax
x-github-request-id: AEF4:0A55:EB72DB:12E1949:687D0B16
Using S3Proxy in Java projects · gaul/s3proxy Wiki · GitHub
Skip to content
Navigation Menu
{{ message }}
-
Notifications
You must be signed in to change notification settings - Fork 248
Using S3Proxy in Java projects
Andrew Gaul edited this page Feb 2, 2025
·
20 revisions
Java projects can include the latest S3Proxy release via Maven artifacts:
<dependency>
<groupId>org.gaul</groupId>
<artifactId>s3proxy</artifactId>
<version>2.6.0</version>
</dependency>
Sonatype also provides pre-release snapshots:
<repositories>
<repository>
<id>apache-snapshots</id>
<url>https://repository.apache.org/content/repositories/snapshots</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>sonatype-snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
...
<dependency>
<groupId>org.gaul</groupId>
<artifactId>s3proxy</artifactId>
<version>2.6.1-SNAPSHOT</version>
</dependency>
Instantiate S3Proxy by creating a backend BlobStore
object and a frontend S3Proxy
object. An example configuring the filesystem-nio2 backend and listening on port 8080:
Properties properties = new Properties();
properties.setProperty("jclouds.filesystem.basedir", "/tmp/blobstore");
BlobStoreContext context = ContextBuilder
.newBuilder("filesystem-nio2")
.credentials("identity", "credential")
.overrides(properties)
.build(BlobStoreContext.class);
S3Proxy s3Proxy = S3Proxy.builder()
.blobStore(context.getBlobStore())
.endpoint(URI.create("https://127.0.0.1:8080"))
.build();
s3Proxy.start();
while (!s3Proxy.getState().equals(AbstractLifeCycle.STARTED)) {
Thread.sleep(1);
}
The S3Proxy Main class and unit tests demonstrate more complicated configurations:
- https://github.com/gaul/s3proxy/blob/master/src/main/java/org/gaul/s3proxy/Main.java
- https://github.com/gaul/s3proxy/blob/master/src/test/java/org/gaul/s3proxy/AwsSdkTest.java
The S3Proxy JUnit Rule provides a way to write JUnit tests for classes that require the S3 API without actually using S3. It utilizes S3Proxy under the covers to provide a "bare minimum", easy to use version of S3 that plugs into the JUnit lifecycle by starting the proxy before each test and shutting it down afterwards.
@Rule
public S3ProxyRule s3Proxy = S3ProxyRule.builder()
.withCredentials("access", "secret")
.build();
@Test
public void example() {
//set up an AWS S3 client using the rule as an endpoint
AmazonS3 s3Client = AmazonS3ClientBuilder
.standard()
.withCredentials(
new AWSStaticCredentialsProvider(
new BasicAWSCredentials(s3Proxy.getAccessKey(),
s3Proxy.getSecretKey())))
.withEndpointConfiguration(
new AwsClientBuilder.EndpointConfiguration(s3Proxy.getUri().toString(),
Regions.US_EAST_1.getName()))
.build();
s3Client.createBucket("test_bucket");
//exercise your code that you want to test, using the above client
myS3Uploader.uploadFile(s3Client, someFile);
//verify the expected results of the above code
List<S3ObjectSummary> summaries = s3Client.listObjects("test_bucket")
.getObjectSummaries();
assertThat(summaries).hasSize(1);
assertThat(summaries.get(0).getSize()).isEqualTo(someFile.length());
}
You can’t perform that action at this time.