You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现跨区域S3存储桶CSV文件复制代码咨询

Java实现跨区域S3存储桶CSV文件复制

以下代码基于AWS Java SDK V2实现,采用S3服务端复制模式,不需要把文件下载到本地中转,复制效率更高。

前置依赖

如果是Maven项目,先在pom.xml中引入S3相关依赖:

<dependency>
    <groupId>software.amazon.awssdk</groupId>
    <artifactId>s3</artifactId>
    <version>2.25.0</version> <!-- 可替换为实际使用的稳定版本 -->
</dependency>

前置权限要求

  • 代码运行所用的IAM身份需要拥有Test区域源桶的s3:GetObject、s3:GetObjectVersion(桶开启版本控制时需要)权限
  • 同时需要拥有Dev区域目标桶的s3:PutObject权限

可参考代码片段

import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.CopyObjectRequest;
import software.amazon.awssdk.services.s3.model.S3Exception;

public class S3CrossRegionCsvCopy {

    public static void main(String[] args) {
        // 以下配置项替换为实际的资源信息
        String sourceTestRegion = "us-east-1"; // Test环境对应的AWS区域码
        String sourceBucket = "test-environment-csv-bucket"; // Test区域源存储桶名
        String sourceCsvPath = "data/2024/transaction.csv"; // 源CSV文件在桶内的对象键
        String targetDevRegion = "cn-north-1"; // Dev环境对应的AWS区域码
        String targetBucket = "dev-environment-csv-bucket"; // Dev区域目标存储桶名
        String targetCsvPath = "sync/test/transaction.csv"; // 复制后文件在目标桶的存储路径

        // 初始化目标区域的S3客户端,凭证默认从环境变量、系统配置、云主机实例角色链加载
        S3Client s3Client = S3Client.builder()
                .region(Region.of(targetDevRegion))
                .credentialsProvider(DefaultCredentialsProvider.create())
                .build();

        try {
            // 构建跨区域复制请求,明确指定源对象所属区域
            CopyObjectRequest copyReq = CopyObjectRequest.builder()
                    .sourceBucket(sourceBucket)
                    .sourceKey(sourceCsvPath)
                    .sourceRegion(sourceTestRegion)
                    .destinationBucket(targetBucket)
                    .destinationKey(targetCsvPath)
                    // 可按需追加目标文件的存储类型、访问权限、服务端加密等配置
                    .build();

            // 发起服务端复制请求
            s3Client.copyObject(copyReq);
            System.out.printf("CSV跨区域复制完成,源路径:s3://%s/%s,目标路径:s3://%s/%s%n",
                    sourceBucket, sourceCsvPath, targetBucket, targetCsvPath);

        } catch (S3Exception e) {
            System.err.printf("复制失败,错误码:%s,错误信息:%s%n",
                    e.awsErrorDetails().errorCode(), e.awsErrorDetails().errorMessage());
            throw e;
        } finally {
            s3Client.close();
        }
    }
}

注意事项

  • 上述代码适用于单文件、体积小于5GB的CSV复制场景,如果单个CSV文件超过5GB,需要改用S3分段复制接口
  • 禁止在代码中硬编码AK/SK凭证,优先使用默认凭证链加载身份信息,避免凭证泄露
  • 复制操作走AWS内部骨干网络,不会产生公网出口流量,速度远高于本地下载再上传的模式

如果需要批量复制桶下所有CSV文件,可以先调用ListObjectsV2接口列出所有后缀为.csv的对象,再循环执行上述复制逻辑即可。


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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 13:54:25