public function presign()

in src/Client.php [378:426]


    public function presign($request, $args = []): Models\PresignResult
    {
        if (!($request instanceof Types\RequestModel)) {
            throw new \InvalidArgumentException(
                '$request is not subclass of RequestModel, got ' . \gettype($request)
            );
        }
        $validRequestTypes = [
            Models\GetObjectRequest::class,
            Models\PutObjectRequest::class,
            Models\HeadObjectRequest::class,
            Models\InitiateMultipartUploadRequest::class,
            Models\UploadPartRequest::class,
            Models\CompleteMultipartUploadRequest::class,
            Models\AbortMultipartUploadRequest::class,
        ];

        if (!in_array(get_class($request), $validRequestTypes, true)) {
            throw new \InvalidArgumentException("Invalid request type: " . get_class($request));
        }
        $name = \get_class($request);
        $pos = \strrpos($name, '\\');
        $opName = \substr($name, $pos + 1, -7);
        $class = Transform\Functions::getTransformClass($opName);
        $fromFunc = "from$opName";

        // prepare
        $input = call_user_func([$class, $fromFunc], $request);

        $options = $args;
        $options['sdk_presign'] = true;
        $options['auth_method'] = 'query';
        if (isset($args['expiration']) && ($args['expiration'] instanceof \DateTime)) {
            $input->setOpMetadata('expiration_time', $args['expiration']);
        } else if (isset($args['expires']) && ($args['expires'] instanceof \DateInterval)) {
            $expirationTime = (new \DateTime('now', new \DateTimeZone('UTC')))->add($args['expires']);
            $input->setOpMetadata('expiration_time', $expirationTime);
        }

        // execute
        $result = $this->client->presignInner($input, $options);

        return new Models\PresignResult(
            $result['method'],
            $result['url'],
            $result['expiration'],
            $result['signedHeaders']
        );
    }