Não, você não pode obter o URL em uma única ação, mas duas :)
Em primeiro lugar, pode ser necessário tornar o arquivo público antes de enviar, porque não faz sentido obter o URL que ninguém pode acessar. Você pode fazer isso configurando ACL como Michael Astreiko sugeriu. Você pode obter o URL do recurso chamando getResourceUrl
ou getUrl
.
AmazonS3Client s3Client = (AmazonS3Client)AmazonS3ClientBuilder.defaultClient();
s3Client.putObject(new PutObjectRequest("your-bucket", "some-path/some-key.jpg", new File("somePath/someKey.jpg")).withCannedAcl(CannedAccessControlList.PublicRead))
s3Client.getResourceUrl("your-bucket", "some-path/some-key.jpg");
Nota1:
A diferença entre getResourceUrl
e getUrl
é que getResourceUrl retornará nulo quando ocorrer uma exceção.
Nota2: o
getUrl
método não está definido na interface AmazonS3. Você precisa lançar o objeto para AmazonS3Client se usar o construtor padrão.