예제 #1
0
 /**
  * Copy an object
  *
  * @param string $bucket Source bucket name
  * @param string $uri Source object URI
  * @param string $bucket Destination bucket name
  * @param string $uri Destination object URI
  * @param constant $acl ACL constant
  * @param array $metaHeaders Optional array of x-amz-meta-* headers
  * @param array $requestHeaders Optional array of request headers (content type, disposition, etc.)
  * @param constant $storageClass Storage class constant
  * @return mixed | false
  */
 public static function copyObject($srcBucket, $srcUri, $bucket, $uri, $acl = self::ACL_PRIVATE, $metaHeaders = array(), $requestHeaders = array(), $storageClass = self::STORAGE_CLASS_STANDARD)
 {
     $rest = new AEUtilsS3Request('PUT', $bucket, $uri, AEUtilAmazons3::getInstance()->defaultHost);
     $rest->setHeader('Content-Length', 0);
     foreach ($requestHeaders as $h => $v) {
         $rest->setHeader($h, $v);
     }
     foreach ($metaHeaders as $h => $v) {
         $rest->setAmzHeader('x-amz-meta-' . $h, $v);
     }
     if ($storageClass !== self::STORAGE_CLASS_STANDARD) {
         // Storage class
         $rest->setAmzHeader('x-amz-storage-class', $storageClass);
     }
     $rest->setAmzHeader('x-amz-acl', $acl);
     $rest->setAmzHeader('x-amz-copy-source', sprintf('/%s/%s', $srcBucket, rawurlencode($srcUri)));
     if (sizeof($requestHeaders) > 0 || sizeof($metaHeaders) > 0) {
         $rest->setAmzHeader('x-amz-metadata-directive', 'REPLACE');
     }
     $rest = $rest->getResponse();
     if ($rest->error === false && $rest->code !== 200) {
         $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status');
     }
     if ($rest->error !== false) {
         $o = self::getInstance();
         $o->setWarning(sprintf(__CLASS__ . "::copyObject({$srcBucket}, {$srcUri}, {$bucket}, {$uri}): [%s] %s", $rest->error['code'], $rest->error['message']));
         return false;
     }
     return true;
 }
예제 #2
0
 /**
  * Get an object
  *
  * @param string $bucket Bucket name
  * @param string $uri Object URI
  * @param mixed $saveTo Filename or resource to write to
  * @return mixed
  */
 public static function getObject($bucket, $uri, $saveTo = false, $from = null, $to = null)
 {
     $rest = new AEUtilsS3Request('GET', $bucket, $uri, AEUtilAmazons3::getInstance()->defaultHost);
     if ($saveTo !== false) {
         if (is_resource($saveTo)) {
             $rest->fp = $saveTo;
         } else {
             if (($rest->fp = @fopen($saveTo, 'wb')) !== false) {
                 $rest->file = realpath($saveTo);
             } else {
                 $rest->response->error = array('code' => 0, 'message' => 'Unable to open save file for writing: ' . $saveTo);
             }
         }
     }
     if ($rest->response->error === false) {
         // Set the range header
         if (!empty($from) && !empty($to)) {
             $rest->setHeader('Range', "bytes={$from}-{$to}");
         }
         $rest->getResponse();
     }
     if ($rest->response->error === false && ($rest->response->code !== 200 && $rest->response->code !== 206)) {
         $rest->response->error = array('code' => $rest->response->code, 'message' => 'Unexpected HTTP status');
     }
     if ($rest->response->error !== false) {
         $o = self::getInstance();
         $o->setWarning(sprintf(__CLASS__ . "::getObject({$bucket}, {$uri}): [%s] %s", $rest->response->error['code'], $rest->response->error['message']));
         return false;
     }
     return true;
 }