1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- <?php
- namespace Aws\S3;
- use Aws\CommandInterface;
- use Aws\ResultInterface;
- use Psr\Http\Message\RequestInterface;
- /**
- * Injects ObjectURL into the result of the PutObject operation.
- *
- * @internal
- */
- class PutObjectUrlMiddleware
- {
- /** @var callable */
- private $nextHandler;
- /**
- * Create a middleware wrapper function.
- *
- * @return callable
- */
- public static function wrap()
- {
- return function (callable $handler) {
- return new self($handler);
- };
- }
- /**
- * @param callable $nextHandler Next handler to invoke.
- */
- public function __construct(callable $nextHandler)
- {
- $this->nextHandler = $nextHandler;
- }
- public function __invoke(CommandInterface $command, RequestInterface $request = null)
- {
- $next = $this->nextHandler;
- return $next($command, $request)->then(
- function (ResultInterface $result) use ($command) {
- $name = $command->getName();
- switch ($name) {
- case 'PutObject':
- case 'CopyObject':
- $result['ObjectURL'] = isset($result['@metadata']['effectiveUri'])
- ? $result['@metadata']['effectiveUri']
- : null;
- break;
- case 'CompleteMultipartUpload':
- $result['ObjectURL'] = urldecode($result['Location'] ?? '');
- break;
- }
- return $result;
- }
- );
- }
- }
|