| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- // Copyright 2023 Yunion
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- package volcengine
- import (
- "context"
- "net/http"
- "github.com/volcengine/ve-tos-golang-sdk/v2/tos"
- "github.com/volcengine/ve-tos-golang-sdk/v2/tos/enum"
- "yunion.io/x/cloudmux/pkg/cloudprovider"
- "yunion.io/x/log"
- "yunion.io/x/pkg/errors"
- )
- const (
- OSS_META_HEADER = "x-oss-meta-"
- )
- type SObject struct {
- bucket *SBucket
- cloudprovider.SBaseCloudObject
- }
- func (obj *SObject) GetIBucket() cloudprovider.ICloudBucket {
- return obj.bucket
- }
- func (obj *SObject) GetAcl() cloudprovider.TBucketACLType {
- acl := cloudprovider.ACLPrivate
- toscli, err := obj.bucket.region.GetTosClient()
- if err != nil {
- log.Errorf("Get Client %s", err)
- return acl
- }
- result, err := toscli.GetObjectACL(context.Background(), &tos.GetObjectACLInput{Bucket: obj.bucket.Name, Key: obj.Key})
- if err != nil {
- log.Errorf("GetObjectAcl %s", err)
- }
- grants := result.Grants
- return grantToCannedAcl(grants)
- }
- func (obj *SObject) SetAcl(aclStr cloudprovider.TBucketACLType) error {
- toscli, err := obj.bucket.region.GetTosClient()
- if err != nil {
- return errors.Wrap(err, "GetTosClient")
- }
- input := &tos.PutObjectACLInput{Bucket: obj.bucket.Name, Key: obj.Key, ACL: enum.ACLType(aclStr)}
- _, err = toscli.PutObjectACL(context.Background(), input)
- if err != nil {
- return errors.Wrapf(err, "PutObjectACL")
- }
- return nil
- }
- func (obj *SObject) GetMeta() http.Header {
- if obj.Meta != nil {
- return obj.Meta
- }
- toscli, err := obj.bucket.region.GetTosClient()
- if err != nil {
- log.Errorf("Get Client %s", err)
- return nil
- }
- result, err := toscli.GetObjectV2(context.Background(), &tos.GetObjectV2Input{Bucket: obj.bucket.Name, Key: obj.Key})
- if err != nil {
- log.Errorf("Get Object error %s", err)
- return nil
- }
- newHeader := http.Header{}
- meta := result.GetObjectBasicOutput.ObjectMetaV2.Meta
- for _, key := range meta.AllKeys() {
- value, exist := meta.Get(key)
- if !exist {
- log.Errorf("Key missing in meta data %s", key)
- } else {
- newHeader.Add(key, value)
- }
- }
- obj.Meta = cloudprovider.FetchMetaFromHttpHeader(
- OSS_META_HEADER,
- newHeader,
- )
- return obj.Meta
- }
- func (obj *SObject) SetMeta(ctx context.Context, meta http.Header) error {
- return cloudprovider.ObjectSetMeta(ctx, obj.bucket, obj, meta)
- }
|