Skip to content

Commit ccb48de

Browse files
zhangkebazhangkeba
andauthored
support get object basic info (#15)
* support get object basic info * support get object basic info --------- Co-authored-by: zhangkeba <zhangkeba@xiaomi.com>
1 parent 01a83e2 commit ccb48de

3 files changed

Lines changed: 86 additions & 0 deletions

File tree

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"log"
6+
"os"
7+
8+
"github.com/XiaoMi/go-fds/fds"
9+
)
10+
11+
func main() {
12+
fdsConf, err := fds.NewClientConfiguration(os.Getenv("GO_FDS_TEST_ENDPOINT"))
13+
if err != nil {
14+
log.Fatal(err)
15+
}
16+
17+
fdsClient := fds.New(os.Getenv("GO_FDS_TEST_ACCESS_KEY_ID"), os.Getenv("GO_FDS_TEST_ACCESS_KEY_SECRET"), fdsConf)
18+
19+
objectBasicInfo, err := fdsClient.GetObjectBasicInfo("bucketname", "test.txt")
20+
if err != nil {
21+
log.Fatal(err)
22+
}
23+
24+
fmt.Println(objectBasicInfo)
25+
if objectBasicInfo.AllowOutsideAccess != nil {
26+
fmt.Println(*objectBasicInfo.AllowOutsideAccess)
27+
}
28+
}

fds/bucket.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,12 @@ func (client *Client) DeleteBucketWithContext(ctx context.Context, bucketName st
9090
// GetBucketInfoResponse is result of GetBucketInfo
9191
type GetBucketInfoResponse struct {
9292
AllowOutsideAccess bool `json:"allowOutsideAccess"`
93+
EnableSSE bool `json:"enableSSE"`
9394
CreationTime int64 `json:"creationTime"`
9495
BucketName string `json:"name"`
9596
ObjectNum int64 `json:"numObjects"`
9697
UsedSpace int64 `json:"usedSpace"`
98+
StorageClassType StorageClass `json:"storageClass"`
9799
}
98100

99101
// GetBucketInfo get information of a bucket

fds/object.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,26 @@ func (metadata *ObjectMetadata) serialize() ([]byte, error) {
382382
return result, nil
383383
}
384384

385+
func (metadata *ObjectMetadata) UnmarshalJSON(data []byte) error {
386+
var aux struct {
387+
RawMeta struct {
388+
Entry []struct {
389+
Key string `json:"key"`
390+
Value string `json:"value"`
391+
} `json:"entry"`
392+
} `json:"rawMeta"`
393+
}
394+
if err := json.Unmarshal(data, &aux); err != nil {
395+
return err
396+
}
397+
398+
metadata.metadata = make(map[string]string, len(aux.RawMeta.Entry))
399+
for _, kv := range aux.RawMeta.Entry {
400+
metadata.metadata[kv.Key] = kv.Value
401+
}
402+
return nil
403+
}
404+
385405
func parseObjectMetadataFromHeader(header http.Header) *ObjectMetadata {
386406
objectMetadata := NewObjectMetadata()
387407
for k := range header {
@@ -875,3 +895,39 @@ func (client *Client) SetObjectPublicWithContext(ctx context.Context, bucketName
875895

876896
return client.SetObjectACLWithContext(ctx, aclRequest)
877897
}
898+
899+
type ObjectBasicInfo struct {
900+
AllowOutsideAccess *bool `json:"allowOutsideAccess,omitempty"`
901+
Size int64 `json:"size"`
902+
UploadTime int64 `json:"uploadTime"`
903+
StorageClassType StorageClass `json:"storageClass"`
904+
Metadata ObjectMetadata `json:"metadataBean"`
905+
}
906+
907+
type getObjectBasicInfoOption struct {
908+
BasicInfo string `param:"basicInfo" header:"-"`
909+
}
910+
911+
// GetObjectBasicInfo
912+
func (client *Client) GetObjectBasicInfo(bucketName, objectName string) (*ObjectBasicInfo, error) {
913+
return client.GetObjectBasicInfoWithContext(context.Background(), bucketName, objectName)
914+
}
915+
916+
func (client *Client) GetObjectBasicInfoWithContext(ctx context.Context, bucketName, objectName string) (*ObjectBasicInfo, error) {
917+
result := &ObjectBasicInfo{}
918+
req := &clientRequest{
919+
BucketName: bucketName,
920+
ObjectName: objectName,
921+
Method: HTTPGet,
922+
QueryHeaderOptions: getObjectBasicInfoOption{},
923+
Result: result,
924+
}
925+
926+
resp, err := client.do(ctx, req)
927+
if err != nil {
928+
return nil, err
929+
}
930+
defer resp.Body.Close()
931+
932+
return result, nil
933+
}

0 commit comments

Comments
 (0)