| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 | <?phpnamespace 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;            }        );    }}
 |