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.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With