最近更新时间:2026-07-09 17:29:20
以下代码用于复制目录:
package main
import (
"fmt"
"github.com/ks3sdklib/aws-sdk-go/aws"
"github.com/ks3sdklib/aws-sdk-go/aws/awsutil"
"github.com/ks3sdklib/aws-sdk-go/aws/credentials"
"github.com/ks3sdklib/aws-sdk-go/service/s3"
)
func main() {
// 创建访问凭证,请将<AccessKeyID>与<SecretAccessKey>替换为实际值
cre := credentials.NewStaticCredentials("<AccessKeyID>", "<SecretAccessKey>", "")
// 创建KS3客户端,更多配置项请查看初始化文档
client := s3.New(&aws.Config{
Credentials: cre, // 访问凭证
Region: "BEIJING", // 访问地域
Endpoint: "ks3-cn-beijing.ksyuncs.com", // 访问域名
})
// 复制目录
resp, err := client.CopyDir(&s3.CopyDirInput{
SourceBucket: aws.String("src_bucket"), // 源存储空间名称,必填
SourcePrefix: aws.String("src_data/"), // 源对象前缀,非必填
Bucket: aws.String("dst_bucket"), // 目标存储空间名称,必填
Prefix: aws.String("dst_data/"), // 目标对象前缀,非必填
Jobs: aws.Long(3), // 文件并发数,即同时复制的文件数,默认为3,非必填
Parallel: aws.Long(3), // 块并发数,即单文件分块复制并发数,默认为3,非必填
ProgressFn: func(stat s3.DirResult) {
// 进度回调,每完成一个文件触发一次
fmt.Printf("总数: %d, 成功: %d, 失败: %d\n", stat.TotalNum, stat.SuccessNum, stat.FailNum)
},
})
if err != nil {
panic(err)
}
fmt.Println("结果:\n", awsutil.StringValue(resp))
}以下代码用于跨区域复制目录:
package main
import (
"fmt"
"github.com/ks3sdklib/aws-sdk-go/aws"
"github.com/ks3sdklib/aws-sdk-go/aws/awsutil"
"github.com/ks3sdklib/aws-sdk-go/aws/credentials"
"github.com/ks3sdklib/aws-sdk-go/service/s3"
)
func main() {
// 创建源存储空间访问凭证,请将<AccessKeyID>与<SecretAccessKey>替换为实际值
cre := credentials.NewStaticCredentials("<AccessKeyID>", "<SecretAccessKey>", "")
// 创建源存储空间KS3客户端,更多配置项请查看初始化文档
client := s3.New(&aws.Config{
Credentials: cre, // 源存储空间访问凭证
Region: "BEIJING", // 源存储空间访问地域
Endpoint: "ks3-cn-beijing.ksyuncs.com", // 源存储空间访问域名
})
// 创建目标存储空间访问凭证,请将<AccessKeyID>与<SecretAccessKey>替换为实际值
dstCre := credentials.NewStaticCredentials("<AccessKeyID>", "<SecretAccessKey>", "")
// 创建目标存储空间KS3客户端,更多配置项请查看初始化文档
dstClient := s3.New(&aws.Config{
Credentials: dstCre, // 目标存储空间访问凭证
Region: "SHANGHAI", // 目标存储空间访问地域
Endpoint: "ks3-cn-shanghai.ksyuncs.com", // 目标存储空间访问域名
})
// 跨区域复制目录
resp, err := client.CopyDirAcrossRegion(&s3.CopyDirInput{
SourceBucket: aws.String("src_bucket"), // 源存储空间名称,必填
SourcePrefix: aws.String("src_data/"), // 源对象前缀,非必填
Bucket: aws.String("dst_bucket"), // 目标存储空间名称,必填
Prefix: aws.String("dst_data/"), // 目标对象前缀,非必填
Jobs: aws.Long(3), // 文件并发数,即同时复制的文件数,默认为3,非必填
Parallel: aws.Long(3), // 块并发数,即单文件分块复制并发数,默认为3,非必填
ProgressFn: func(stat s3.DirResult) {
// 进度回调,每完成一个文件触发一次
fmt.Printf("总数: %d, 成功: %d, 失败: %d\n", stat.TotalNum, stat.SuccessNum, stat.FailNum)
},
}, dstClient)
if err != nil {
panic(err)
}
fmt.Println("结果:\n", awsutil.StringValue(resp))
}
纯净模式
