Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Configure path-style in Java SDK Amazon S3

I'm using AWS Java SDK provided by Amazon to interact with the S3 service.

It seems that by default, the SDK uses virtual-host-style for buckets (i.e. buckets are reffered by bucket-name.s3.amazonaws.com. Example:

PUT / HTTP/1.1
Host: a-given-bucket.s3.amazonaws.com
Date: Tue, 26 Jun 2012 10:39:40 GMT
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Content-Length: 0

However, I need to use path-style in my application, as follows:

PUT /a-given-bucket/ HTTP/1.1
Host: s3.amazonaws.com
Date: Thu, 21 Jun 2012 16:27:32 GMT
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Content-Length: 0

Is it possible to use path-style with the Java SDK, please? In positive case, how can I do it? I have look at ClientConfiguration and AmazonS3Client classes but I don't see any method to do it...

My SDK version, in the case it matters, is: 2.0.0v201206151133.

Thanks!


Fermín

PD. Some headers have been omitted in the samples for the sake of simplicity.

EDIT: Such a feature (to configure the URL path style used by the AmazonS3Client) is quite useful in case you have buckets with a dot (".") in them. HTTPS requests with Virtual-host-style do not work, see this and this.

like image 633
fgalan Avatar asked Jun 27 '12 14:06

fgalan


1 Answers

For SDK v2 you can you enable path style by doing this:

    public S3Client build() {

        final S3Configuration config = S3Configuration.builder()
                .pathStyleAccessEnabled(true)
                .build();

        return S3Client.builder()
                .serviceConfiguration(config)
                // other set up
                .build();
    }

Amazon wass planning to deprecate path style access from Sept 2020, but this deprecation has been postponed: https://forums.aws.amazon.com/ann.jspa?annID=6776

like image 138
Jason White Avatar answered Sep 19 '22 08:09

Jason White