2017-06-23 4 views
0

Nous utilisons des URL s3 prédéfinies pour fournir un accès Web à images stockées dans s3.Java amazonS3.generatePresignedUrl - Comment configurer https://s3.amazonaws.com/mycompany au lieu de https://mycompany.s3.amazonaws.com/com.mycompany

Le code java que nous utilisons pour générer les urls presigned est similaire au-dessous

String accessKey = ...; 
String secretKey = ...; 
String region = ...; 
com.amazonaws.HttpMethod awsHttpMethod = ...; 
String bucketName = ...; 
String objectKey = ...; 
Date expirationDate = ...; 

BasicAWSCredentials creds = new BasicAWSCredentials(accessKey, secretKey); 
AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(creds)).withRegion(region).build(); 
GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucketName, objectKey); 
generatePresignedUrlRequest.setMethod(awsHttpMethod); 
generatePresignedUrlRequest.setExpiration(expirationDate); 
URL url = s3Client.generatePresignedUrl(generatePresignedUrlRequest); 

L'URL qui est généré par le code ressemble à

https://com.mycompany.personalpictures.s3.amazonaws.com/picture123.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20170623T150540Z&X-Amz-SignedHeaders=host&X-Amz-Expires=59&X-Amz-Credential=AKIAIVLB4ANK6B45G3IA%2F20170623%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=d25d407ee8efa76f339388ec93579a19be8eaead9663d6d378cf2ec6d9d9cac2

Cependant depuis notre seau Norme de nommage contient des points, un appel à l'URL ci-dessus entraîne une erreur SSL: no alternative certificate subject name matches target host name 'com.mycompany.personalpictures.s3.amazonaws.com'

Je lis dans this post que la cause première est les points dans le nom de compartiment et que l'utilisation https://s3.amazonaws.com/com.mycompany.personalpictures/picture123.png devrait contourner le problème.

Comment puis-je générer des URL prédéfinies en utilisant le format d'URL https://s3.amazonaws.com/mybucket/myfile?

Répondre

0

figured it out ...

nécessaire pour utiliser .enablePathStyleAccess() lors de la création du client s3. Avec cela la ligne de code est maintenant

AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(creds)).withRegion(region).enablePathStyleAccess().build();