You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

AWS Java SDK 2 S3 CopyObjectRequest源与目标配置疑问

AWS Java SDK v2 复制对象请求的正确构建方式

太懂这种困惑了!我从AWS Java SDK v1迁到v2的时候也卡在这里——CopyObjectRequest的Builder设计一开始完全摸不着头脑,官方文档和示例也没把这个差异讲清楚,坑死个人!

核心逻辑先搞懂

首先要掰正一个认知:SDK v2里,目标桶和目标键是直接通过CopyObjectRequest.Builderbucket()key()方法设置的(这俩参数对应的就是复制操作的最终目标位置);而源对象则是通过copySource()方法来指定,而且你完全不用手动拼接路径或者处理URL编码,SDK有更安全的方式帮你搞定。

两种靠谱的实现方式

方式1:用CopySource构建源(推荐,自动处理编码)

CopySource构建器来定义源对象,它会自动处理键中的特殊字符编码,避免手动拼接时踩坑:

// 第一步:构建源对象的描述
CopySource source = CopySource.builder()
    .bucket("你的源桶名称")
    .key("你的源对象键")
    // 如果需要复制指定版本的对象,加上这一行即可
    // .versionId("源对象的版本ID")
    .build();

// 第二步:构建复制请求
CopyObjectRequest copyRequest = CopyObjectRequest.builder()
    .bucket("你的目标桶名称") // 设置目标桶
    .key("你的目标对象键")     // 设置目标键
    .copySource(source)       // 关联刚才定义的源对象
    .build();

方式2:直接传入源字符串(适合简单场景)

如果你的源对象键没有特殊字符(比如空格、中文、特殊符号),也可以直接拼接源桶名称/源对象键格式的字符串传入copySource()

CopyObjectRequest copyRequest = CopyObjectRequest.builder()
    .bucket("你的目标桶名称")
    .key("你的目标对象键")
    .copySource("你的源桶名称/你的源对象键")
    .build();

和SDK v1的写法对比

对比你熟悉的v1写法:

// SDK v1 简洁的写法
new CopyObjectRequest(sourceBucket, sourceKey, destinationBucket, destinationKey);

v2其实只是把目标位置拆到了Builder的顶层bucket()/key()方法,源位置统一放到copySource()里,本质的复制逻辑是完全一致的,只是API设计风格变了而已。

当初我也是翻了SDK的源码才搞明白这个对应关系,官方文档确实没把这个差异点明确指出来,希望这个解答能帮你绕开这个坑!

内容的提问来源于stack exchange,提问作者worpet

火山引擎 最新活动