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.
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));
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.