我正在升级一个使用AWS SDK v1.5进行S3操作的遗留Java应用程序,它必须执行的功能之一是根据特定条件将对象ACL从私有更改为公共读取.版本1.5的AmazonS3有一种方法,简单如下:

s3client.setObjectAcl(bucketName, s3Key, acl);

但V2.21.2中似乎不存在该特性或功能.我浏览了所有发布的示例和文档,发现了一个相当复杂的示例,说明如何更改存储桶的ACL,但我需要能够将单个对象的ACL设置为公共读取或返回私有,而不是整个存储桶.

如何在AWS SDK v2.21.x中执行此操作?

推荐答案

在v2中,他们使用renamed种方法来匹配API操作名称:

为了为AWS拥有的众多服务提供SDK支持,AWS SDK广泛使用代码生成.在1.11.x中,生成除S3客户端之外的所有服务客户端.这经常导致非Java AWS SDK和IAM策略引用S3操作的方式(例如,DeleteBucketReplicationConfiguration)与Java AWS SDK引用该操作的方式(DeleteBucketReplication)之间的脱节.这使得创建IAM策略和切换到其他SDK变得困难,因为对应的字符串并不总是被很好地记录下来.

在2.x中,S3的生成方式与其他所有服务一样,确保操作名称、输入和输出始终与其他SDK和IAM的名称、输入和输出匹配.

您正在寻找putObjectAcl,它是PutObjectAcl API操作的包装器.

Java相关问答推荐

将@ManyToOne JPA Composite Key用作Id保存实体添加额外参数

使用log 4j2格式的Hibernate 显示SQL日志(log)

ittext pdf延迟签名,签名无效

弹簧靴和龙目岛

使用意向过滤器从另一个应用程序启动服务

如何使用Maven和Spring Boot将构建时初始化、跟踪类初始化正确传递到本机编译

测试容器无法加载类路径初始化脚本

通过Spring Security公开Spring Boot执行器端点

使SLF4J在Android中登录到Logcat,在测试中登录到控制台(Gradle依赖问题)

如何集成语义发布和BitBucket(Java项目)

使用正则表达式从字符串中提取多个值

JNI:将代码打包成自包含的二进制文件

使用迭代器遍历HashMap不会因IF条件而停止

Oracle中从JSON中提取和插入数据

在应用程序运行时更改LookAndFeel

将Optionals/null安全添加到嵌套的flatMap/流

可以';不要在Intellij IDEA中使用最新的Java版本(JDK 21)

如何转换Vector<;对象>;转换为int?

如何在 WebSphere Application Server 内的托管线程上运行 BatchEE 作业(job)?

对于 Hangman 游戏,索引 0 超出长度 0 的范围