Amazon s3 如何使用jets3t API访问和读取共享bucket的bucket信息?

Amazon s3 如何使用jets3t API访问和读取共享bucket的bucket信息?,amazon-s3,shared,bucket,jets3t,Amazon S3,Shared,Bucket,Jets3t,这是我的错误的解释。我在Eucalyptus(开源)中注册了两个用户的A、B。我在用户a的帐户中使用Jets3t API创建了一个bucket B1,并向用户B授予了读取权限(使用“CanonicalGrantee”界面)。在使用A的凭据列出访问控制列表时,我获得了A的完全控制权,并读取了B。但是,当我尝试使用B的凭据访问Bucket B1信息时,出现了此错误 线程“main”org.jets3t.service.S3ServiceException中出现异常:无法使用无效的bucket执行操作

这是我的错误的解释。我在Eucalyptus(开源)中注册了两个用户的A、B。我在用户a的帐户中使用Jets3t API创建了一个bucket B1,并向用户B授予了读取权限(使用“CanonicalGrantee”界面)。在使用A的凭据列出访问控制列表时,我获得了A的完全控制权,并读取了B。但是,当我尝试使用B的凭据访问Bucket B1信息时,出现了此错误

线程“main”org.jets3t.service.S3ServiceException中出现异常:无法使用无效的bucket执行操作listObjects:null 位于org.jets3t.service.S3Service.listObjects(S3Service.java:1410) 位于test.ObjectPermission.main(ObjectPermission.java:40)

有问题的代码是
S3Bucket publicBucket=s3Service.getBucket(“B1”)

这里B1是用户A。在上述代码中,s3service返回空值。我知道s3service只检索在B'凭证下创建的信息


我不知道如何解决这个问题,也不知道如何使用Jets3t API访问共享bucket

您使用的方法是在帐户B的bucket列表中搜索帐户A的bucket B1。因此,它总是在帐户B中找不到该bucket并返回null。 所以你必须用另一种方式来检查。您可以通过对帐户B服务对象的Bucket B1执行head请求来检查它,该调用的服务对象为isBucketAccessible(),如果它返回true,则表示Bucket是可访问的,否则不可访问


我100%确信它会工作:)

我已经从用户B的S3Service连接尝试了isBucketAccessible()方法。返回值为false,表示无法访问“为用户B授予权限”
S3Service S3Service=new RestS3Service(cred1,”,null,jets3)//s3service提供了一个凭证
S3Bucket publicBucket=s3service.getBucket(“B1”)
AccessControlList bucketAcl=s3Service.getBucketAcl(publicBucket)
bucketAcl.grantPermission(新的规范受让人(“kkptnjkyqvtgheousvcyrnhqdxt1chq3pmocq”),Permission.Permission\u READ)
publicBucket.setAcl(bucketAcl)
s3Service.putBucketAcl(publicBucket)当我列出用户A的Bucket B1 FULL_控件的ACL并读取用户B的权限时。然后我尝试了方法s3Service。用户B的isBucketAccessible(“B1”)。我不知道为什么此方法返回false,即使用户B有读取权限。