我使用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请求不工作,看到这个和这个 。
该方法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));
有没有办法强制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