С версии: 21.12.2012
Автор: Vitaliy Demidov (vitaliy@scalr.com)
Наследование: extends Scalr\Service\Aws\S3\AbstractS3DataType
Пример #1
0
 /**
  * Copy Object action
  *
  * This implementation of the PUT operation creates a copy of an object that is already stored in Amazon S3.
  * A PUT copy operation is the same as performing a GET and then a PUT
  *
  * @param   string     $scrBucketName  Source bucket name.
  * @param   string     $srcObject      Source object name.
  * @param   string     $destBucketName Destination bucket name.
  * @param   string     $destObject     Destination object name.
  * @param   array      $requestHeaders optional Request headers array looks like array(header => value)
  * @param   string     $versionId      optional Specifies source version id.
  * @return  CopyObjectResponseData     Returns CopyObjectResponseData
  * @throws  ClientException
  * @throws  S3Exception
  */
 public function copyObject($scrBucketName, $srcObject, $destBucketName, $destObject, array $requestHeaders = null, $versionId = null)
 {
     $result = null;
     $options = array('_subdomain' => (string) $destBucketName, 'x-amz-copy-source' => sprintf("/%s/%s" . ($versionId !== null ? "?versionId=%s" : ''), $scrBucketName, self::escapeObjectName($srcObject), self::escape($versionId)));
     $allowedHeaders = array('x-amz-metadata-directive', 'x-amz-copy-source-if-match', 'x-amz-copy-source-if-none-match', 'x-amz-copy-source-if-unmodified-since', 'x-amz-copy-source-if-modified-since', 'x-amz-server-side-encryption', 'x-amz-storage-class', 'x-amz-website-redirect-location');
     $allowedHeaders = array_merge($allowedHeaders, self::$xamzAclAllowedHeaders);
     if (!empty($requestHeaders)) {
         $requestHeaders = $this->getFilteredArray($allowedHeaders, $requestHeaders);
         $options = array_merge($options, $requestHeaders);
     }
     $response = $this->getClient()->call('PUT', $options, sprintf('/%s', self::escapeObjectName($destObject)));
     if ($response->getError() === false) {
         $sxml = simplexml_load_string($response->getRawContent());
         $result = new CopyObjectResponseData();
         $result->setS3($this->s3);
         $result->setBucketName((string) $destBucketName)->setObjectName((string) $destObject)->setHeaders($response->getHeaders())->setETag((string) $sxml->ETag)->setLastModified(new DateTime((string) $sxml->LastModified, new DateTimeZone('UTC')));
     }
     return $result;
 }