如何通过 aws Java SDK 公开 S3 对象?

Posted

技术标签:

【中文标题】如何通过 aws Java SDK 公开 S3 对象?【英文标题】:How do you make an S3 object public via the aws Java SDK? 【发布时间】:2011-09-25 07:50:17 【问题描述】:

如何通过 AWS Java SDK 公开 S3 对象?

具体来说,通过 Java AWS SDK 的哪些 API 方法可用于在上传对象时将其公开?

【问题讨论】:

【参考方案1】:

在amazon aws forum 中找到答案。

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

答案是

.withCannedAcl(CannedAccessControlList.PublicRead)

【讨论】:

如果您使用传输管理器,此解决方案也可以使用。只需将s3Client.putObject( 替换为TransferManager.upload( 不幸的是,android SDK似乎没有TransferUtility这个功能:github.com/aws/aws-sdk-android/issues/63 当使用TransferManager时,以下工作:Upload upload = tm.upload( new PutObjectRequest(bucketName, key, file, metadata) .withCannedAcl(CannedAccessControlList.PublicRead));【参考方案2】:

另一种方法可以更精细地控制谁可以查看对象(所有用户或仅经过身份验证的用户):

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

【讨论】:

【参考方案3】:
s3client.setObjectAcl("bucketName[/subDirectory]", fileName, CannedAccessControlList.PublicRead);
URL url = s3client.getUrl("bucketName[/subDirectory]", fileName);
String sharableLink = url.toExternalForm();

source

【讨论】:

以上是关于如何通过 aws Java SDK 公开 S3 对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 aws-java-sdk 从 S3 逐块读取文件

如何使用aws-java-sdk从S3读取块的文件块

如何使用 Java SDK 将目录与 AWS S3 同步?

如何从 aws-sdk 中的 s3 存储桶创建 Elastic Beanstalk 实例?

如何使用 C# HttpClient 或 AWS SDK 通过 CloudFront 将视频上传到 S3

如何使用scala和aws-java-sdk从S3存储桶中获取所有S3ObjectSummary?