2012-06-27 58 views
6

我使用Amazon提供的AWS Java SDK來與S3服務交互。 。在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類,但我沒有看到任何方法來做我t ...

我的SDK版本,在它的情​​況下,是:2.0.0v201206151133。

謝謝!


費爾明

PD。爲了簡單起見,樣本中的一些標題已被省略。

編輯: 這樣的功能(配置由AmazonS3Client使用的URL路徑的風格)是如果你有水桶在其中一個點是非常有用(「」)。虛擬主機風格的HTTPS請求不起作用,請參見thisthis

+0

在AWS開發者論壇還publised:https://forums.aws.amazon.com/thread.jspa?threadID=98203 – fgalan

回答

0

使用Java SDK無法強制執行V1(路徑樣式)存儲區尋址。唯一的例外是您的存儲桶名稱不是DNS可尋址的,在這種情況下,SDK將自動使用V1尋址。發生這種情況時,例如,當您的存儲桶名稱包含句點(由於這個原因而不鼓勵)。

如果你想要這個功能,你必須修改AmazonS3Client類來允許它。

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

但是,我不知道,我相信你的要求,你「需要」使用V1的鬥尋址。 SDK已經處理了所有需要V1尋址的情況 - 或者如果您發現了一個不需要的情況,請在論壇中告訴我們。

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

8

方法withPathStyleAccess已被棄用。請使用以下代替:

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

的方法已過時:

現在這是可能的,我不知道時,剛開始,但它至少在1.7.8版本中的可用Java AWS SDK。

只需撥打setClientOptions您AmazonS3實例:

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