Skip to content

Commit 0a8fe1f

Browse files
Jacksevennt
authored andcommitted
Feat: 支持跨桶复制 && SSL 配置支持跳过 OSS 证书校验
1 parent 9edc41c commit 0a8fe1f

File tree

3 files changed

+32
-2
lines changed

3 files changed

+32
-2
lines changed

client.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,9 @@ func newOSS(name string, cfg *BucketConfig, logger *elog.Component) (Client, err
123123
if cfg.Debug {
124124
opts = append(opts, oss.SetLogLevel(oss.Debug))
125125
}
126+
if !cfg.SSL {
127+
opts = append(opts, oss.InsecureSkipVerify(true))
128+
}
126129
client, err := oss.New(cfg.Endpoint, cfg.AccessKeyID, cfg.AccessKeySecret, opts...)
127130
if err != nil {
128131
return nil, err

oss.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,14 @@ func (ossClient *OSS) keyWithPrefix(key string) string {
3030
return ossClient.cfg.Prefix + key
3131
}
3232

33+
func extractBucketFromRawSrcKey(rawSrcKey string) (bucketName, key string, err error) {
34+
parts := strings.SplitN(strings.TrimPrefix(rawSrcKey, "/"), "/", 2)
35+
if len(parts) != 2 {
36+
return "", "", fmt.Errorf("failed to parse rawSrcKey: %s", rawSrcKey)
37+
}
38+
return parts[0], parts[1], nil
39+
}
40+
3341
func (ossClient *OSS) Copy(ctx context.Context, srcKey, dstKey string, options ...CopyOption) error {
3442
cfg := DefaultCopyOptions()
3543
for _, opt := range options {
@@ -65,10 +73,15 @@ func (ossClient *OSS) Copy(ctx context.Context, srcKey, dstKey string, options .
6573
for k, v := range cfg.meta {
6674
ossOptions = append(ossOptions, oss.Meta(k, v))
6775
}
68-
_, err = bucket.CopyObject(srcKeyWithBucket, dstKey, ossOptions...)
76+
bucketName, keyName, err := extractBucketFromRawSrcKey(srcKeyWithBucket)
6977
if err != nil {
7078
return err
7179
}
80+
_, err = bucket.CopyObjectFrom(bucketName, keyName, dstKey, ossOptions...)
81+
if err != nil {
82+
return err
83+
}
84+
7285
return nil
7386
}
7487

oss_test.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,10 +320,24 @@ func TestOSS_Copy(t *testing.T) {
320320
err = ossCmp.Del(ctx, guidCopyDst)
321321
assert.NoError(t, err)
322322

323-
err = ossCmp.Copy(ctx, guidCopySrc, guidCopyDst, CopyWithRawSrcKey())
323+
// 测试 rawSrcKey 模式 (跨 bucket 复制)
324+
rawSrcKey := fmt.Sprintf("/%s/%s", os.Getenv("BUCKET"), guidCopySrc)
325+
err = ossCmp.Copy(ctx, rawSrcKey, guidCopyDst, CopyWithRawSrcKey())
324326
assert.NoError(t, err)
325327

326328
ok, err := ossCmp.Exists(ctx, guidCopyDst)
327329
assert.NoError(t, err)
328330
assert.Equal(t, true, ok)
331+
332+
// 测试同 bucket 模式
333+
err = ossCmp.Del(ctx, guidCopyDst)
334+
assert.NoError(t, err)
335+
336+
err = ossCmp.Copy(ctx, guidCopySrc, guidCopyDst)
337+
assert.NoError(t, err)
338+
339+
ok, err = ossCmp.Exists(ctx, guidCopyDst)
340+
assert.NoError(t, err)
341+
assert.Equal(t, true, ok)
342+
329343
}

0 commit comments

Comments
 (0)