'latest', 'region' => 'us-east-1', 'endpoint' => $S3Server, 'use_path_style_endpoint' => true, 'credentials' => [ 'key' => $S3AccessKey, 'secret' => $S3SecretKey, ], ]); $result = $s3Client->ListObjects(['Bucket' => $S3BucketName, 'Delimiter'=>'/', 'Prefix' => 'skills/']); $response = []; foreach ($result["Contents"] as $skill){ // Get a command object from the client $command = $s3Client->getCommand('GetObject', [ 'Bucket' => $S3BucketName, 'Key' => $skill["Key"] ]); // Create a pre-signed URL for a request with duration of 10 miniutes $presignedRequest = $s3Client->createPresignedRequest($command, '60 minutes'); // Get the actual presigned-url $downloadURL = (string) $presignedRequest->getUri(); $encodedUrl = rtrim(strtr(base64_encode($downloadURL), '+/', '-_'), '='); $path = "/rs:fit:0:$defaultSkillsWidth:1/g:no/{$encodedUrl}.webp"; $signature = rtrim(strtr(base64_encode(hash_hmac('sha256', $imgProxySalt.$path, $imgProxyKey, true)), '+/', '-_'), '='); array_push($response, $imgProxyUrl . "/" . $signature . $path); } return $response; }