private static function overwirteMetadataProp()

in src/Copier.php [289:336]


    private static function overwirteMetadataProp(Models\InitiateMultipartUploadRequest &$imRequest, array &$context)
    {
        /**
         * @var Models\CopyObjectRequest $request
         * @var Models\CopyObjectResult $metaProp
         */
        $request = $context['request'];
        $metaProp = $context['meta_prop'];
        $directive = $request->metadataDirective ?? '';

        switch (strtolower($directive)) {
            case '':
            case 'copy':
                if ($metaProp == null) {
                    throw new \InvalidArgumentException("request.metadataDirective is COPY, but meets nil metaProp for source");
                }
                $imRequest->cacheControl = null;
                $imRequest->contentType = null;
                $imRequest->contentDisposition = null;
                $imRequest->contentEncoding = null;
                $imRequest->expires = null;
                $imRequest->metadata = null;
                $imRequest->expires = null;
                $imHeaders = [];

                // copy meta form source
                foreach ($metaProp->headers as $k => $v) {
                    $lk = strtolower($k);
                    if (strncmp($lk, 'x-oss-meta', 10) == 0) {
                        $imHeaders[$k] = $v;
                    } else if (in_array($lk, self::MetadataCopied)) {
                        $imHeaders[$k] = $v;
                    }
                }
                $imRequestRo = new \ReflectionObject($imRequest);
                $pp = $imRequestRo->getProperty('headers');
                $pp->setAccessible(true);
                $pp->setValue($imRequest, $imHeaders);

                break;
            case 'replace':
                // the metedata has been copied via the copyRequest function before
                break;
            default:
                //unsupport Directive
                throw new \InvalidArgumentException("Unsupport MetadataDirective, $directive");
        }
    }