我正在使用亚马逊提供的
AWS Java SDK来与S3服务进行交互.
似乎默认情况下,SDK使用虚拟主机样式作为存储桶(即存储桶由bucket-name.s3.amazonaws.com提供.示例:
- 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
但是,我需要在我的应用程序中使用path-style,如下所示:
- 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
可以在Java SDK中使用路径样式吗?在积极的情况下,我该怎么办?我看过ClientConfiguration和AmazonS3Client类,但我没有看到任何方法来做…
我的SDK版本在重要的情况下是:2.0.0v201206151133.
谢谢!
费尔明
PD.为简单起见,样本中省略了一些标题.
编辑:
这样的功能(用于配置AmazonS3Client使用的URL路径样式)非常有用,以防你的桶中带有点(“.”).具有虚拟主机样式的HTTPS请求不起作用,请参阅this和this.
解决方法
不推荐使用带有PathStyleAccess的方法.请改用以下内容:
- AmazonS3 s3client = AmazonS3Client.builder()
- .withCredentials((new AWSStaticCredentialsProvider(credentials)))
- .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("host","region"))
- .withPathStyleAccessEnabled(true)
- .build();
弃用方法:
现在可以了,我不确定它何时推出,但它至少可以在1.7.8版本的Java AWS SDK中使用.
只需在您的AmazonS3实例上调用setClientOptions即可:
- AmazonS3 client = new AmazonS3Client(credentials);
- client.setS3ClientOptions(new S3ClientOptions().withPathStyleAccess(true));