func (c *Client) UploadPart(uploadPartRequest UploadPartRequest, option *bce.SignOption) (UploadPartResponse, error) { bucketName := uploadPartRequest.BucketName objectKey := uploadPartRequest.ObjectKey checkBucketName(bucketName) checkObjectKey(objectKey) if uploadPartRequest.PartNumber < MIN_PART_NUMBER || uploadPartRequest.PartNumber > MAX_PART_NUMBER { panic(fmt.Sprintf("Invalid partNumber %d. The valid range is from %d to %d.", uploadPartRequest.PartNumber, MIN_PART_NUMBER, MAX_PART_NUMBER)) } if uploadPartRequest.PartSize > 1024*1024*1024*5 { panic(fmt.Sprintf("PartNumber %d: Part Size should not be more than 5GB.", uploadPartRequest.PartSize)) } params := map[string]string{ "partNumber": strconv.Itoa(uploadPartRequest.PartNumber), "uploadId": uploadPartRequest.UploadId, } req, err := bce.NewRequest("PUT", c.GetURL(bucketName, objectKey, params), uploadPartRequest.PartData) if err != nil { return nil, err } option = bce.CheckSignOption(option) option.AddHeaders(map[string]string{ "Content-Length": strconv.FormatInt(uploadPartRequest.PartSize, 10), "Content-Type": "application/octet-stream", }) if _, ok := option.Headers["Content-MD5"]; !ok { option.AddHeader("Content-MD5", util.GetMD5(uploadPartRequest.PartData, true)) } resp, err := c.SendRequest(req, option) if err != nil { return nil, err } uploadPartResponse := NewUploadPartResponse(resp.Header) return uploadPartResponse, nil }
func (c *Client) setBucketAclFromString(bucketName, acl string, option *bce.SignOption) error { params := map[string]string{"acl": ""} req, err := bce.NewRequest("PUT", c.GetURL(bucketName, "", params), nil) if err != nil { return err } option = bce.CheckSignOption(option) headers := map[string]string{"x-bce-acl": acl} option.AddHeaders(headers) _, err = c.SendRequest(req, option) return err }
func (copyObjectRequest CopyObjectRequest) mergeToSignOption(option *bce.SignOption) { m, err := util.ToMap(copyObjectRequest) if err != nil { return } headerMap := make(map[string]string) for key, value := range m { if str, ok := value.(string); ok { headerMap[key] = str } } option.AddHeaders(headerMap) if copyObjectRequest.ObjectMetadata != nil { option.AddHeader("x-bce-metadata-directive", "replace") copyObjectRequest.ObjectMetadata.mergeToSignOption(option) } else { option.AddHeader("x-bce-metadata-directive", "copy") } }