diff --git a/pkg/cloudprovider/objectstore.go b/pkg/cloudprovider/objectstore.go index 395d69e80d..95f75a5547 100644 --- a/pkg/cloudprovider/objectstore.go +++ b/pkg/cloudprovider/objectstore.go @@ -228,6 +228,17 @@ func GetIObjects(bucket ICloudBucket, objectPrefix string, isRecursive bool) ([] return ret, nil } +func GetIObject(bucket ICloudBucket, objectPrefix string) (ICloudObject, error) { + objects, err := GetIObjects(bucket, objectPrefix, true) + if err != nil { + return nil, errors.Wrap(err, "GetIObjects") + } + if len(objects) > 0 && objects[0].GetKey() == objectPrefix { + return objects[0], nil + } + return nil, ErrNotFound +} + func Makedir(ctx context.Context, bucket ICloudBucket, key string) error { segs := make([]string, 0) for _, seg := range strings.Split(key, "/") { diff --git a/pkg/compute/models/buckets.go b/pkg/compute/models/buckets.go index d1362152f9..085c09ae56 100644 --- a/pkg/compute/models/buckets.go +++ b/pkg/compute/models/buckets.go @@ -763,14 +763,15 @@ func (bucket *SBucket) PerformAcl( return nil, httperrors.NewInternalServerError("syncWithCloudBucket error %s", err) } } else { - objects, err := iBucket.GetIObjects(objKey, false) + object, err := cloudprovider.GetIObject(iBucket, objKey) if err != nil { - return nil, httperrors.NewInternalServerError("iBucket.GetIObjects error %s", err) + if err == cloudprovider.ErrNotFound { + return nil, httperrors.NewResourceNotFoundError("object %s not found", objKey) + } else { + return nil, httperrors.NewInternalServerError("iBucket.GetIObjects error %s", err) + } } - if len(objects) == 0 { - return nil, httperrors.NewResourceNotFoundError("object %s not found", objKey) - } - err = objects[0].SetAcl(cloudprovider.TBucketACLType(aclStr)) + err = object.SetAcl(cloudprovider.TBucketACLType(aclStr)) if err != nil { return nil, httperrors.NewInternalServerError("setAcl error %s", err) } @@ -841,14 +842,15 @@ func (bucket *SBucket) GetDetailsAcl( if len(objKey) == 0 { acl = iBucket.GetAcl() } else { - objects, err := iBucket.GetIObjects(objKey, true) + object, err := cloudprovider.GetIObject(iBucket, objKey) if err != nil { - return nil, httperrors.NewInternalServerError("iBucket.GetIObjects error %s", err) + if err == cloudprovider.ErrNotFound { + return nil, httperrors.NewNotFoundError("object %s not found", objKey) + } else { + return nil, httperrors.NewInternalServerError("iBucket.GetIObjects error %s", err) + } } - if len(objects) == 0 { - return nil, httperrors.NewNotFoundError("object %s not found", objKey) - } - acl = objects[0].GetAcl() + acl = object.GetAcl() } ret := jsonutils.NewDict() ret.Add(jsonutils.NewString(string(acl)), "acl") diff --git a/pkg/multicloud/aws/bucket.go b/pkg/multicloud/aws/bucket.go index 35cd8b91ec..4c93bcb26d 100644 --- a/pkg/multicloud/aws/bucket.go +++ b/pkg/multicloud/aws/bucket.go @@ -277,5 +277,9 @@ func (b *SBucket) GetTempUrl(method string, key string, expire time.Duration) (s default: return "", errors.Error("unsupported method") } - return request.Presign(expire) + url, _, err := request.PresignRequest(expire) + if err != nil { + return "", errors.Wrap(err, "request.PresignRequest") + } + return url, nil } diff --git a/pkg/multicloud/objectstore/shell.go b/pkg/multicloud/objectstore/shell.go index aacb43d660..01b29d62bb 100644 --- a/pkg/multicloud/objectstore/shell.go +++ b/pkg/multicloud/objectstore/shell.go @@ -229,14 +229,11 @@ func S3Shell() { if err != nil { return err } - objects, err := bucket.GetIObjects(args.KEY, false) + object, err := cloudprovider.GetIObject(bucket, args.KEY) if err != nil { return err } - if len(objects) == 0 { - return cloudprovider.ErrNotFound - } - fmt.Println(objects[0].GetAcl()) + fmt.Println(object.GetAcl()) return nil }) @@ -250,14 +247,11 @@ func S3Shell() { if err != nil { return err } - objects, err := bucket.GetIObjects(args.KEY, false) + object, err := cloudprovider.GetIObject(bucket, args.KEY) if err != nil { return err } - if len(objects) == 0 { - return cloudprovider.ErrNotFound - } - err = objects[0].SetAcl(cloudprovider.TBucketACLType(args.ACL)) + err = object.SetAcl(cloudprovider.TBucketACLType(args.ACL)) if err != nil { return err } diff --git a/pkg/multicloud/qcloud/bucket.go b/pkg/multicloud/qcloud/bucket.go index 0b7a47a71d..58bcaaa952 100644 --- a/pkg/multicloud/qcloud/bucket.go +++ b/pkg/multicloud/qcloud/bucket.go @@ -256,8 +256,8 @@ func (b *SBucket) GetTempUrl(method string, key string, expire time.Duration) (s return "", errors.Wrap(err, "GetCosClient") } url, err := coscli.Object.GetPresignedURL(context.Background(), method, key, - b.region.client.SecretKey, b.region.client.SecretID, + b.region.client.SecretKey, expire, nil) if err != nil { return "", errors.Wrap(err, "coscli.Object.GetPresignedURL")