MikeNereson
MikeNereson

Reputation: 3900

How do you make an S3 object public via the aws Java SDK?

How do you make an S3 object public via the AWS Java SDK?

Specifically, what API methods via the Java AWS SDK can be used to make an Object public when its uploaded?

Upvotes: 64

Views: 33775

Answers (3)

Rajat Verma
Rajat Verma

Reputation: 2590

s3client.setObjectAcl("bucketName[/subDirectory]", fileName, CannedAccessControlList.PublicRead);
URL url = s3client.getUrl("bucketName[/subDirectory]", fileName);
String sharableLink = url.toExternalForm();

source

Upvotes: 4

Maurice
Maurice

Reputation: 7361

An alternative approach which allows for more finegrained control of who exactly is allowed to view the object (all users or authenticated users only):

    PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, keyName, image);
    AccessControlList acl = new AccessControlList();
    acl.grantPermission(GroupGrantee.AllUsers, Permission.Read); //all users or authenticated
    putObjectRequest.setAccessControlList(acl);
    s3client.putObject(putObjectRequest);

Upvotes: 7

MikeNereson
MikeNereson

Reputation: 3900

Found the answer in an amazon aws forum.

return s3Client.putObject(
   new PutObjectRequest(bucketName, objectKey, inputStream, metadata)
      .withCannedAcl(CannedAccessControlList.PublicRead));

The answer being

.withCannedAcl(CannedAccessControlList.PublicRead)

Upvotes: 176

Related Questions