1package main 2 3import ( 4 "context" 5 "fmt" 6 "math/rand" 7 "net/url" 8 "os" 9 "strings" 10 11 "net/http" 12 13 "github.com/mozillazg/go-cos" 14 "github.com/mozillazg/go-cos/debug" 15) 16 17func initUpload(c *cos.Client, name string) *cos.InitiateMultipartUploadResult { 18 v, _, err := c.Object.InitiateMultipartUpload(context.Background(), name, nil) 19 if err != nil { 20 panic(err) 21 } 22 fmt.Printf("%#v\n", v) 23 return v 24} 25 26func uploadPart(c *cos.Client, name string, uploadID string, blockSize, n int) string { 27 28 b := make([]byte, blockSize) 29 if _, err := rand.Read(b); err != nil { 30 panic(err) 31 } 32 s := fmt.Sprintf("%X", b) 33 f := strings.NewReader(s) 34 35 resp, err := c.Object.UploadPart( 36 context.Background(), name, uploadID, n, f, nil, 37 ) 38 if err != nil { 39 panic(err) 40 } 41 fmt.Printf("%s\n", resp.Status) 42 return resp.Header.Get("Etag") 43} 44 45func main() { 46 u, _ := url.Parse(os.Getenv("COS_BUCKET_URL")) 47 b := &cos.BaseURL{BucketURL: u} 48 c := cos.NewClient(b, &http.Client{ 49 Transport: &cos.AuthorizationTransport{ 50 SecretID: os.Getenv("COS_SECRETID"), 51 SecretKey: os.Getenv("COS_SECRETKEY"), 52 Transport: &debug.DebugRequestTransport{ 53 RequestHeader: true, 54 RequestBody: false, 55 ResponseHeader: true, 56 ResponseBody: true, 57 }, 58 }, 59 }) 60 61 name := "test/test_list_parts.go" 62 up := initUpload(c, name) 63 uploadID := up.UploadID 64 ctx := context.Background() 65 blockSize := 1024 * 1024 * 3 66 67 for i := 1; i < 5; i++ { 68 uploadPart(c, name, uploadID, blockSize, i) 69 } 70 opt := &cos.ObjectListPartsOptions{ 71 MaxParts: 2, 72 } 73 74 v, _, err := c.Object.ListPartsWithOpt(ctx, name, uploadID, opt) 75 if err != nil { 76 panic(err) 77 return 78 } 79 for _, p := range v.Parts { 80 fmt.Printf("%d, %s, %d\n", p.PartNumber, p.ETag, p.Size) 81 } 82 fmt.Printf("%s\n", v.Initiator.ID) 83 fmt.Printf("%s\n", v.Owner.ID) 84} 85