Nie, nie możesz uzyskać adresu URL w jednej akcji, ale w dwóch :)
Przede wszystkim może być konieczne upublicznienie pliku przed przesłaniem, ponieważ nie ma sensu uzyskiwać adresu URL, do którego nikt nie ma dostępu. Możesz to zrobić, ustawiając ACL zgodnie z sugestią Michaela Astreiko. Możesz uzyskać adres URL zasobu, dzwoniąc getResourceUrl
lub 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");
Uwaga 1:
różnica między getResourceUrl
i getUrl
polega na tym, że getResourceUrl zwróci wartość null, gdy wystąpi wyjątek.
Uwaga 2:
getUrl
metoda nie jest zdefiniowana w interfejsie AmazonS3. Musisz rzutować obiekt na AmazonS3Client, jeśli używasz standardowego konstruktora.