12

Amazon が提供するAWS Java SDKを使用して、S3 サービスとやり取りしています。

デフォルトでは、SDK はバケットに virtual-host-style を使用しているようです (つまり、バケットはバケット名.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 パス スタイルを構成する) は、バケットにドット (".") が含まれている場合に非常に役立ちます。Virtual-host-style の HTTPS リクエストは機能しません。これこれを参照してください。

4

3 に答える 3

25

メソッドwithPathStyleAccessは廃止されました。代わりに以下を使用してください。

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

非推奨の方法:

これが可能になりました。いつ導入されたのかはわかりませんが、Java AWS SDK の少なくとも 1.7.8 バージョンで利用できます。

AmazonS3 インスタンスでsetClientOptionsを呼び出すだけです。

AmazonS3 client = new AmazonS3Client(credentials);
client.setS3ClientOptions(new S3ClientOptions().withPathStyleAccess(true));
于 2014-06-03T10:37:32.367 に答える
-2

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

于 2012-10-14T23:32:19.840 に答える