我正在使用亚马逊提供的
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));