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']
);
}