1. 本示例需要导入sdk golang package 如下:
import (
"context"
"log"
"time"
"github.com/minio/minio-go/v7"
"github.com/minio/minio-go/v7/pkg/credentials"
)
2. 首先初始化minio客户端,指定enpoint、accesskey,secretkey 参数
s3Client, err := minio.New("s3.amazonaws.com", &minio.Options{
Creds: credentials.NewStaticV4("YOUR-ACCESSKEYID", "YOUR-SECRETACCESSKEY", ""),
Secure: true,
})
if err != nil {
log.Fatalln(err)
}
3. 设置copy object的选项参数,包括源对象和目标对象的选项参数
// Source object
src := minio.CopySrcOptions{
Bucket: "my-sourcebucketname",
Object: "my-sourceobjectname",
// All following conditions are allowed and can be combined together.
// Set modified condition, copy object modified since 2014 April.
MatchModifiedSince: time.Date(2014, time.April, 0, 0, 0, 0, 0, time.UTC),
// Set unmodified condition, copy object unmodified since 2014 April.
// MatchUnmodifiedSince: time.Date(2014, time.April, 0, 0, 0, 0, 0, time.UTC),
// Set matching ETag condition, copy object which matches the following ETag.
// MatchETag: "31624deb84149d2f8ef9c385918b653a",
// Set matching ETag copy object which does not match the following ETag.
// NoMatchETag: "31624deb84149d2f8ef9c385918b653a",
}
// Destination object
dst := minio.CopyDestOptions{
Bucket: "my-bucketname",
Object: "my-objectname",
}
4. 调用CopyObject接口,把源对象拷贝到目标对象
// Initiate copy object.
ui, err := s3Client.CopyObject(context.Background(), dst, src)
if err != nil {
log.Fatalln(err)
}
log.Printf("Copied %s, successfully to %s - UploadInfo %v\n", dst, src, ui)