Configurar o estilo path em Java SDK Amazon S3

estou a usar AWS Java SDK fornecido pela Amazon para interagir com o serviço S3.

parece que por padrão, o SDK usa o estilo host virtual para baldes(ou seja, baldes são refeitos por bucket-name . s3.amazonaws.com exemplo:

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

No entanto, preciso de usar o estilo path na minha aplicação, do seguinte modo:

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

é possível usar o path-style com o SDK Java, por favor? Em caso positivo, como posso fazê-lo? Eu tenho olhado para a configuração do cliente e AmazonS3Client classes mas eu não vejo nenhum método para fazê-lo...

a minha versão SDK, no caso em que importa, é: 2.0. 0v201206151133.

Obrigado!


Fermín

Polícia. Alguns cabeçalhos foram omitidos nas amostras por uma questão de simplicidade.

editar: Tal recurso (para configurar o estilo do caminho URL usado pelo AmazonS3Client) é bastante útil no caso de você ter baldes com um ponto (".") neles. Os pedidos de HTTPS com o estilo Virtual-host não funcionam, veja em isto e isto.

Author: kavanpatil, 2012-06-27

2 answers

O método com acesso à via foi depreciado. Em vez disso, utilize o seguinte:

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

Método depreciado:

Isso agora é possível, Não tenho certeza quando foi introduzido, mas está disponível em pelo menos a Versão 1.7.8 do Java AWS SDK.

Basta chamar setClientOptions {[[14]} na sua instância AmazonS3:

AmazonS3 client = new AmazonS3Client(credentials);
client.setS3ClientOptions(new S3ClientOptions().withPathStyleAccess(true));
 11
Author: oggmonster, 2017-05-17 21:16:16

Não há forma de forçar o endereçamento do balde V1 (estilo path) usando o SDK Java. A única exceção é quando o nome do seu balde não é DNS endereçável, caso em que o SDK irá usar automaticamente o endereçamento V1. Isto acontece, por exemplo, quando o seu nome do balde contém um período (que é desencorajado por esta razão).

Se quiser esta funcionalidade, terá de modificar a classe AmazonS3Client para permitir ele.

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

No entanto, não sei se acredito na sua afirmação de que precisa de usar o endereçamento do balde V1. O SDK já lida com todos os casos em que o endereçamento V1 é necessário -- ou se você encontrou um caso em que não é necessário, por favor nos avise nos fóruns.

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

 0
Author: Zach Musgrave, 2012-10-14 23:32:19