/** * @param array $options * * @return array */ protected function retrievePaginatedListing(array $options) { $resultPaginator = $this->s3Client->getPaginator('ListObjects', $options); $listing = []; foreach ($resultPaginator as $result) { $listing = array_merge($listing, $result->get('Contents') ?: [], $result->get('CommonPrefixes') ?: []); } return $listing; }
/** * Creates an UploadState object for a multipart upload by querying the * service for the specified upload's information. * * @param S3Client $client S3Client used for the upload. * @param string $bucket Bucket for the multipart upload. * @param string $key Object key for the multipart upload. * @param string $uploadId Upload ID for the multipart upload. * * @return UploadState */ public static function getStateFromService(S3Client $client, $bucket, $key, $uploadId) { $state = new UploadState(['Bucket' => $bucket, 'Key' => $key, 'UploadId' => $uploadId]); foreach ($client->getPaginator('ListParts', $state->getId()) as $result) { // Get the part size from the first part in the first result. if (!$state->getPartSize()) { $state->setPartSize($result->search('Parts[0].Size')); } // Mark all the parts returned by ListParts as uploaded. foreach ($result['Parts'] as $part) { $state->markPartAsUploaded($part['PartNumber'], ['PartNumber' => $part['PartNumber'], 'ETag' => $part['ETag']]); } } $state->setStatus(UploadState::INITIATED); return $state; }