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

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

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

【问题讨论】:

    标签: java api amazon-s3 amazon-web-services


    【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-08
        • 2016-07-24
        • 2017-06-29
        • 2018-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多