func (req *Request) canonical(option *SignOption) string { canonicalStrings := make([]string, 0, 4) canonicalStrings = append(canonicalStrings, req.Method) canonicalURI := util.URIEncodeExceptSlash(req.URL.Path) canonicalStrings = append(canonicalStrings, canonicalURI) canonicalStrings = append(canonicalStrings, req.URL.RawQuery) canonicalHeader := req.toCanonicalHeaderString(option) canonicalStrings = append(canonicalStrings, canonicalHeader) return strings.Join(canonicalStrings, "\n") }
func (c *Client) CopyObjectFromRequest(copyObjectRequest CopyObjectRequest, option *bce.SignOption) (*CopyObjectResponse, error) { checkBucketName(copyObjectRequest.SrcBucketName) checkBucketName(copyObjectRequest.DestBucketName) checkObjectKey(copyObjectRequest.SrcKey) checkObjectKey(copyObjectRequest.DestKey) req, err := bce.NewRequest("PUT", c.GetURL(copyObjectRequest.DestBucketName, copyObjectRequest.DestKey, nil), nil) if err != nil { return nil, err } option = bce.CheckSignOption(option) source := util.URIEncodeExceptSlash(fmt.Sprintf("/%s/%s", copyObjectRequest.SrcBucketName, copyObjectRequest.SrcKey)) option.AddHeader("x-bce-copy-source", source) copyObjectRequest.mergeToSignOption(option) resp, err := c.SendRequest(req, option) if err != nil { return nil, err } bodyContent, err := resp.GetBodyContent() if err != nil { return nil, err } var copyObjectResponse *CopyObjectResponse err = json.Unmarshal(bodyContent, ©ObjectResponse) if err != nil { return nil, err } return copyObjectResponse, nil }