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
相关产品推荐
相关产品推荐

