2012-06-27 21 views
6

Sto usando AWS Java SDK fornito da Amazon per interagire con il servizio S3. .Configura path-style in Java SDK Amazon S3

Sembra che per impostazione predefinita, l'SDK utilizza-host-style virtuale per secchi (cioè secchi sono A riferiti da secchio nome .s3.amazonaws.com Esempio:

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 

Tuttavia, necessario utilizzare il percorso in stile nella mia richiesta, come segue:??

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 

E 'possibile utilizzare il percorso in stile con il Java SDK, in caso positivo, come posso farlo io ho un'occhiata a ClientConfiguration e le classi AmazonS3Client ma non vedo alcun metodo per farlo t ...

La versione del mio SDK, nel caso in cui è importante, è: 2.0.0v201206151133.

Grazie!


Fermín

PD. Alcune intestazioni sono state omesse nei campioni per motivi di semplicità.

EDIT: Tale funzione (per configurare lo stile sentiero URL utilizzato dal AmazonS3Client) è molto utile nel caso in cui si dispone di benne con un punto in loro (""). Le richieste HTTPS con stile host virtuale non funzionano, vedere this e this.

+0

pubblicato per commenti Anche in AWS Developers Forum: https://forums.aws.amazon.com/thread.jspa?threadID=98203 – fgalan

risposta

0

Non c'è modo di forzare l'indirizzamento del bucket V1 (path-style) utilizzando Java SDK. L'unica eccezione è quando il nome del bucket non è indirizzabile DNS, nel qual caso l'SDK utilizzerà automaticamente l'indirizzamento V1. Ciò accade, ad esempio, quando il nome del bucket contiene un punto (che è scoraggiato per questo motivo).

Se si desidera questa funzionalità, è necessario modificare la classe AmazonS3Client per consentirla.

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

Tuttavia, non sono sicuro Credo che la vostra affermazione che si "bisogno" di utilizzare V1 secchio di indirizzamento. L'SDK gestisce già tutti i casi in cui è necessario l'indirizzamento V1 - o se hai trovato un caso in cui non lo fa, faccelo sapere nei forum.

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

8

Procedimento withPathStyleAccess è obsoleta. Si prega di utilizzare il seguente invece:

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

Metodo obsoleto:

Questo è ora possibile, io non sono sicuro che quando è stato introdotto, ma è disponibile in almeno la versione 1.7.8 di l'SDK Java AWS.

Basta chiamare setClientOptions sull'istanza AmazonS3:

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