由于对象版本控制是在存储桶级别上启用的,因此在一个存储桶中开启版本控制后,公共访问权限将在该存储桶中停止工作。这是因为在存储桶启用版本控制后,S3将不再使用前缀列表方法来决定哪些内容应该被公开访问。下面是用Java SDK解决此问题的示例代码:
AmazonS3 s3client = new AmazonS3Client(new ProfileCredentialsProvider());
String bucketName = "my-bucket";
String objectKey = "my-object";
// Enable Versioning
s3client.setBucketVersioningConfiguration(new SetBucketVersioningConfigurationRequest(bucketName,
new BucketVersioningConfiguration(BucketVersioningConfiguration.ENABLED)));
// Upload Object
s3client.putObject(new PutObjectRequest(bucketName, objectKey, new File("path/to/file")));
// Make Object Public and get Object URL
AccessControlList acl = s3client.getObjectAcl(bucketName, objectKey);
acl.grantPermission(GroupGrantee.AllUsers, Permission.Read);
s3client.setObjectAcl(bucketName, objectKey, acl);
String objectUrl = s3client.getUrl(bucketName, objectKey).toString();
System.out.println("Object URL: " + objectUrl);
以上代码将在给定的存储桶中启用版本控制,上传对象,将访问控制列表设置为公共读取访问权限,并获取该对象的URL以便公开共享。