in oss/copier.go [497:538]
func (d *copierDelegate) overwirteMetadataProp(imRequest *InitiateMultipartUploadRequest) error {
copyRequest := d.request
switch strings.ToLower(ToString(copyRequest.MetadataDirective)) {
case "", "copy":
if d.metaProp == nil {
return fmt.Errorf("request.MetadataDirective is COPY, but meets nil metaProp for source")
}
imRequest.CacheControl = nil
imRequest.ContentType = nil
imRequest.ContentDisposition = nil
imRequest.ContentEncoding = nil
imRequest.Expires = nil
imRequest.Metadata = nil
imRequest.Headers = map[string]string{}
// skip meta in Headers
for k, v := range d.request.Headers {
lowK := strings.ToLower(k)
if strings.HasPrefix(lowK, "x-oss-meta") {
//skip
} else if _, ok := metadataCopied[lowK]; ok {
//skip
} else {
imRequest.Headers[k] = v
}
}
// copy meta form source
for k, v := range d.metaProp.Headers {
lowK := strings.ToLower(k)
if strings.HasPrefix(lowK, "x-oss-meta") {
imRequest.Headers[lowK] = v[0]
} else if _, ok := metadataCopied[lowK]; ok {
imRequest.Headers[lowK] = v[0]
}
}
case "replace":
// the metedata has been copied via the copyRequest function before
default:
return fmt.Errorf("Unsupport MetadataDirective, %s", ToString(d.request.MetadataDirective))
}
return nil
}