2012-06-27 38 views
6

Estoy usando AWS Java SDK proporcionado por Amazon para interactuar con el servicio S3. .Configurar el estilo de ruta en Java SDK Amazon S3

Parece que, por defecto, el SDK utiliza-host-estilo virtual para cubos (es decir, cubos se reffered por cubo-nombre .s3.amazonaws.com Ejemplo:

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 

Sin embargo, necesitará utilizar la ruta de estilo en mi solicitud, de la siguiente manera:??

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 

¿es posible utilizar la ruta de estilo con el SDK de Java, por favor en caso positivo, ¿cómo puedo hacer que tengo vistazo a ClientConfiguration y clases de AmazonS3Client, pero no veo ningún método para hacerlo t ...

Mi versión del SDK, en el caso que importa, es: 2.0.0v201206151133.

Gracias!


Fermín

PD. Algunos encabezados se han omitido en las muestras por motivos de simplicidad.

EDIT: Tal característica (para configurar el estilo ruta URL utilizada por el AmazonS3Client) es muy útil en caso de que tenga cubos con un punto en ellos (""). Las solicitudes HTTPS con Virtual-host-style no funcionan, consulte this y this.

+0

también publised, en el foro desarrolladores de AWS: https://forums.aws.amazon.com/thread.jspa?threadID=98203 – fgalan

Respuesta

0

No hay forma de forzar el direccionamiento del cubo V1 (estilo de ruta) con el SDK de Java. La única excepción es cuando su nombre de depósito no es direccionable por DNS, en cuyo caso el SDK usará automáticamente el direccionamiento V1. Esto sucede, por ejemplo, cuando el nombre de tu cubo contiene un punto (lo cual no se recomienda por este motivo).

Si desea esta funcionalidad, deberá modificar la clase AmazonS3Client para permitirlo.

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

Sin embargo, no estoy seguro creo que su afirmación de que se "necesita" para usar el cucharón V1 direccionamiento. El SDK ya maneja todos los casos en que es necesario el direccionamiento de V1, o si ha encontrado un caso en el que no es así, háganoslo saber en los foros.

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

8

El método withPathStyleAccess ha dejado de utilizarse. Utilice el siguiente lugar:

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

método en desuso:

Esto es posible ahora, no estoy seguro, cuando se presentó, pero está disponible en por lo menos la versión 1.7.8 de el Java AWS SDK.

Sólo tiene que llamar setClientOptions en su instancia AmazonS3:

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