在Java SDK的亚马逊S3配置路径式(Configure path-style in Java

2019-06-25 20:24发布

我使用AWS的Java SDK Amazon提供与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

不过,我需要使用路径风格在我的应用程序,如下所示:

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请求不工作,看到这个和这个 。

Answer 1:

该方法withPathStyleAccess已被弃用。 请使用以下代替:

AmazonS3 s3client = AmazonS3Client.builder()
            .withCredentials((new AWSStaticCredentialsProvider(credentials)))
            .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("host", "region"))
            .withPathStyleAccessEnabled(true)
            .build();

过时的方法:

这是现在有可能,我不知道,当它被推出,但它至少在1.7.8版本的Java SDK AWS的是可用的。

只需拨打setClientOptions您AmazonS3实例:

AmazonS3 client = new AmazonS3Client(credentials);
client.setS3ClientOptions(new S3ClientOptions().withPathStyleAccess(true));


Answer 2:

有没有办法强制V1(路径式)使用Java SDK斗寻址。 唯一的例外是当你的水桶名字不是DNS访问,在这种情况下,SDK会自动使用V1寻址。 出现这种情况,例如,当你的水桶名称包含一个周期(不鼓励这个原因)。

如果你想要这个功能,你就必须修改AmazonS3Client类允许它。

https://github.com/amazonwebservices/aws-sdk-for-java/

但是,我不知道,我相信你的要求,你“需要”使用V1的斗寻址。 该SDK已经处理了所有的情况下,V1解决是必要的 - 或者,如果你发现它没有的情况下,请让我们知道在论坛中。

https://forums.aws.amazon.com/forum.jspa?forumID=70



文章来源: Configure path-style in Java SDK Amazon S3