fga*_*lan 9 java amazon-s3 amazon-web-services
我正在使用Amazon提供的AWS Java SDK与S3服务进行交互.
似乎默认情况下,SDK使用虚拟主机样式用于存储桶(即存储桶由存储桶名称 .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
Run Code Online (Sandbox Code Playgroud)
但是,我需要在我的应用程序中使用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
Run Code Online (Sandbox Code Playgroud)
是否可以在Java SDK中使用路径样式,好吗?在积极的情况下,我该怎么办?我看过ClientConfiguration和AmazonS3Client类,但我没有看到任何方法来做...
在重要的情况下,我的SDK版本是:2.0.0v201206151133.
谢谢!
费尔明
PD.为简单起见,样本中省略了一些标题.
编辑: 这样的功能(配置AmazonS3Client使用的URL路径样式)非常有用,以防你的桶中有一个点(".").与虚拟主机风格的HTTPS请求不工作,看到这个和这个.
ogg*_*ter 15
不推荐使用带有PathStyleAccess的方法.请改用以下内容:
AmazonS3 s3client = AmazonS3Client.builder()
.withCredentials((new AWSStaticCredentialsProvider(credentials)))
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("host", "region"))
.withPathStyleAccessEnabled(true)
.build();
Run Code Online (Sandbox Code Playgroud)
弃用方法:
现在这是可能的,我不确定它何时推出,但它至少可以在1.7.8版本的Java AWS SDK中使用.
只需在您的AmazonS3实例上调用setClientOptions:
AmazonS3 client = new AmazonS3Client(credentials);
client.setS3ClientOptions(new S3ClientOptions().withPathStyleAccess(true));
Run Code Online (Sandbox Code Playgroud)
对于 SDK v2,您可以通过执行以下操作启用路径样式:
public S3Client build() {
final S3Configuration config = S3Configuration.builder()
.pathStyleAccessEnabled(true)
.build();
return S3Client.builder()
.serviceConfiguration(config)
// other set up
.build();
}
Run Code Online (Sandbox Code Playgroud)
亚马逊计划从 2020 年 9 月起弃用路径样式访问,但此弃用已被推迟:https ://forums.aws.amazon.com/ann.jspa?annID=6776
Zac*_*ave -1
这个答案已经过时了,留在这里供后代使用。请参阅上面的答案。
无法使用 Java SDK 强制进行 V1(路径样式)存储桶寻址。唯一的例外是您的存储桶名称无法通过 DNS 寻址,在这种情况下,SDK 将自动使用 V1 寻址。例如,当您的存储桶名称包含句点时(因此不鼓励这样做),就会发生这种情况。
如果您想要此功能,则必须修改该类AmazonS3Client以允许它。
https://github.com/amazonwebservices/aws-sdk-for-java/
但是,我不确定我是否相信您“需要”使用 V1 存储桶寻址的说法。SDK 已经处理了所有需要 V1 寻址的情况,或者如果您发现不需要 V1 寻址的情况,请在论坛中告诉我们。
https://forums.aws.amazon.com/forum.jspa?forumID=70