s3 presigned test

test-v3dev1
withchao 1 year ago
parent bfd1df751e
commit 4203705bf5

@ -8,6 +8,7 @@ import (
"fmt" "fmt"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/s3" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/s3"
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log"
"github.com/OpenIMSDK/Open-IM-Server/pkg/errs"
"github.com/google/uuid" "github.com/google/uuid"
"path" "path"
"strings" "strings"
@ -191,7 +192,7 @@ func (c *Controller) CompleteUpload(ctx context.Context, uploadID string, partHa
} }
md5Sum := md5.Sum([]byte(strings.Join([]string{uploadInfo.ETag}, partSeparator))) md5Sum := md5.Sum([]byte(strings.Join([]string{uploadInfo.ETag}, partSeparator)))
if md5val := hex.EncodeToString(md5Sum[:]); md5val != upload.Hash { if md5val := hex.EncodeToString(md5Sum[:]); md5val != upload.Hash {
return nil, fmt.Errorf("md5 mismatching %s != %s", md5val, upload.Hash) return nil, errs.ErrArgs.Wrap(fmt.Sprintf("md5 mismatching %s != %s", md5val, upload.Hash))
} }
// 防止在这个时候,并发操作,导致文件被覆盖 // 防止在这个时候,并发操作,导致文件被覆盖
copyInfo, err := c.impl.CopyObject(ctx, uploadInfo.Key, upload.Key+"."+c.UUID()) copyInfo, err := c.impl.CopyObject(ctx, uploadInfo.Key, upload.Key+"."+c.UUID())
@ -199,8 +200,8 @@ func (c *Controller) CompleteUpload(ctx context.Context, uploadID string, partHa
return nil, err return nil, err
} }
cleanObject[copyInfo.Key] = struct{}{} cleanObject[copyInfo.Key] = struct{}{}
if copyInfo.ETag != upload.Hash { if copyInfo.ETag != uploadInfo.ETag {
return nil, errors.New("copy md5 mismatching") return nil, errors.New("[concurrency]copy md5 mismatching")
} }
if _, err := c.impl.CopyObject(ctx, copyInfo.Key, c.HashPath(upload.Hash)); err != nil { if _, err := c.impl.CopyObject(ctx, copyInfo.Key, c.HashPath(upload.Hash)); err != nil {
return nil, err return nil, err

Loading…
Cancel
Save