public function copyToBlob(BlobFile $objFile)
 {
     if ($this->exists_blob($objFile)) {
         $this->outLog('exists_blob');
         $objBlobMetadataResult = $this->blobRestProxy->getBlobMetadata($this->containerName, 'save_image/' . $objFile->file_name);
         $arrMetadata = $objBlobMetadataResult->getMetadata();
         if ($arrMetadata['mtime'] == $objFile->getMtime()) {
             $this->outLog('equals');
             return;
         } elseif ($arrMetadata['mtime'] > $objFile->getMtime()) {
             $result = file_put_contents(IMAGE_SAVE_REALDIR . $objFile->file_name, ENDPOINT_PROTOCOL . '://' . AZURE_BLOB_ACCOUNT_NAME . '.blob.core.windows.net/' . $this->containerName . '/save_image/' . $objFile->file_name);
             $this->outLog($result);
         } else {
         }
     } else {
         try {
             $mimeType = $objFile->getMimeType();
             $this->outLog('create: ' . $objFile->file_name);
             $this->outLog('mimeType: ' . $mimeType);
             $createBlobOptions = new CreateBlobOptions();
             $createBlobOptions->setBlobContentType($mimeType);
             $createBlobOptions->setMetadata(array('mtime' => $objFile->getMtime()));
             $this->blobRestProxy->createBlockBlob($this->containerName, 'save_image/' . $objFile->file_name, $objFile->getResources(), $createBlobOptions);
         } catch (ServiceException $e) {
             $code = $e->getCode();
             $error_message = $e->getMessage();
             $this->outLog($code . ": " . $error_message . "<br />");
         }
     }
 }
Esempio n. 2
0
 protected function createBlockBlob($filename, $data, $options)
 {
     $create_blob_options = new CreateBlobOptions();
     if (isset($options['mime'])) {
         $create_blob_options->setBlobContentType($options['mime']);
     }
     return $this->getBlobService()->createBlockBlob($options['container'], $filename, $data, $create_blob_options);
 }
Esempio n. 3
0
 public function actionAdd()
 {
     if (VF::app()->is_admin || isset($_GET['key']) && $_GET['key'] == 'eb4db0c51005d73ae57064be10c17145') {
         $new_id = 0;
         if (isset($_POST['title'])) {
             $title = trim(mysql_real_escape_string($_POST['title']));
             $lang_id = (int) $_POST['lang_id'];
             $category_id = (int) $_POST['category_id'];
             $holiday_id = (int) $_POST['holiday_id'];
             $instructions = trim(mysql_real_escape_string($_POST['instructions']));
             $prep_time = trim(mysql_real_escape_string($_POST['prep_time']));
             $cook_time = trim(mysql_real_escape_string($_POST['cook_time']));
             $total_time = trim(mysql_real_escape_string($_POST['total_time']));
             $ingredients = $_POST['ingredient'];
             $blob_name = '';
             if (!empty($_FILES['image']['tmp_name'])) {
                 $connectionString = "DefaultEndpointsProtocol=http;AccountName=trecipes;AccountKey=FoleK8mHGV5MaOvnJaZV6MFD7WadIEc12SL5hhwj7h949ysaXcp7VeTHimfQt6qxSwdQIEVkba0NQ/o58cgdXw==";
                 // Create blob REST proxy.
                 $blobRestProxy = ServicesBuilder::getInstance()->createBlobService($connectionString);
                 $options = new CreateBlobOptions();
                 $options->setBlobContentType("image/jpeg");
                 $blob_name = md5(time()) . ".jpg";
                 system("convert " . $_FILES['image']['tmp_name'] . " -resize 200x200 " . $_FILES['image']['tmp_name']);
                 $content = fopen($_FILES['image']['tmp_name'], "r");
                 $blobRestProxy->createBlockBlob("previews", $blob_name, $content, $options);
                 $blob_name = "http://s1.resepte.net/previews/{$blob_name}";
             }
             VF::app()->database->query("INSERT INTO recipes (title, image_url, image_mobile_url, category_id, instructions, lang_id,\n                prep_time, cook_time, total_time, holiday_id) VALUES ('{$title}', '{$blob_name}', '', {$category_id}, '{$instructions}', '{$lang_id}', '{$prep_time}', '{$cook_time}', '{$total_time}', {$holiday_id})\n                ");
             $new_id = VF::app()->database->getLastId();
             if ($new_id > 0) {
                 foreach ($ingredients as $i => $ing) {
                     $ing = mysql_real_escape_string(trim($ing));
                     if (!empty($ing)) {
                         $i_id = VF::app()->database->sql("SELECT id FROM `ingredients` WHERE name = '{$ing}'")->queryRow();
                         $i_id = (int) $i_id['id'];
                         if ($i_id == 0) {
                             VF::app()->database->query("INSERT INTO `ingredients` (name, lang_id) VALUES ('{$ing}', {$lang_id})");
                             $i_id = VF::app()->database->getLastId();
                         }
                         $amount = mysql_real_escape_string(trim($_POST['ingredient_append'][$i]));
                         VF::app()->database->query("INSERT INTO recipes2ingredients (recipe_id, ingredient_id, append) VALUES ('{$new_id}', '{$i_id}', '{$amount}')");
                     }
                 }
             }
         }
         $this->render('add', array('new_id' => $new_id));
     }
 }
 public function pn_blob_cache_set($key, $data, $expire, $headers)
 {
     $options = new CreateBlobOptions();
     //Set metadata and content-type for blob if header array was provided
     if ($this->prepare_headers($headers)) {
         if (isset($this->content_type)) {
             $options->setBlobContentType($this->content_type);
         }
         $options->setCacheControl("max-age=" . $expire);
         $options->setMetadata(array('Projectnamicacheduration' => $expire, 'Headers' => $this->headers_as_json));
     } else {
         $options->setMetadata(array('Projectnamicacheduration' => $expire));
     }
     try {
         //Upload blob
         $this->blob_service->createBlockBlob($this->container, $key, $data, $options);
         return true;
     } catch (ServiceException $e) {
         $this->pn_handle_exception($e);
     }
 }
 /**
  * Upload the given file to an Azure Storage container as a block blob.
  *
  * Block blobs are comprised of blocks, each of which is identified by a block ID.
  * This allows creation or modification of a block blob by writing a set of blocks
  * and committing them by their block IDs, resulting in an overall efficient upload.
  *
  * If writing a block blob that is no more than 64MB in size, upload it
  * in its entirety with a single write operation. Otherwise, chunk the blob into discrete
  * blocks and upload each of them, then commit the blob ID to signal to Azure that they
  * should be combined into a blob. Files over 64MB are then deleted from temporary local storage.
  *
  * When you upload a block to a blob in your storage account, it is associated with the
  * specified block blob, but it does  not become part of the blob until you commit a list
  * of blocks that includes the new block's ID.
  *
  * @param string $containerName   The container to add the blob to.
  * @param string $blobName        The name of the blob to upload.
  * @param string $localFileName   The full path to local file to be uploaded.
  * @param string $blobContentType Optional. Content type of the blob.
  * @param array  $metadata        Optional. Metadata to describe the blob.
  *
  * @throws \Exception|ServiceException Exception if local file can't be read;
  *                                     ServiceException if response code is incorrect.
  */
 public static function putBlockBlob($containerName, $blobName, $localFileName, $blobContentType = null, $metadata = array())
 {
     $copyBlobResult = null;
     $is_large_file = false;
     // Open file
     $handle = fopen($localFileName, 'r');
     if ($handle === false) {
         throw new Exception('Could not open the local file ' . $localFileName);
     }
     /** @var \WindowsAzure\Blob\BlobRestProxy $blobRestProxy */
     $blobRestProxy = WindowsAzureStorageUtil::getStorageClient();
     try {
         if (filesize($localFileName) < self::MAX_BLOB_SIZE) {
             $createBlobOptions = new CreateBlobOptions();
             $createBlobOptions->setBlobContentType($blobContentType);
             $createBlobOptions->setMetadata($metadata);
             $blobRestProxy->createBlockBlob($containerName, $blobName, $handle, $createBlobOptions);
             fclose($handle);
         } else {
             $is_large_file = true;
             // Determine number of page blocks
             $numberOfBlocks = ceil(filesize($localFileName) / self::MAX_BLOB_TRANSFER_SIZE);
             // Generate block id's
             $blocks = array();
             for ($i = 0; $i < $numberOfBlocks; $i++) {
                 /** @var WindowsAzure\Blob\Models\Block */
                 $block = new Block();
                 $block->setBlockId(self::_generateBlockId($i));
                 $block->setType(BlobBlockType::LATEST_TYPE);
                 // Seek position in file
                 fseek($handle, $i * self::MAX_BLOB_TRANSFER_SIZE);
                 // Read contents
                 $fileContents = fread($handle, self::MAX_BLOB_TRANSFER_SIZE);
                 // Put block
                 $blobRestProxy->createBlobBlock($containerName, $blobName, $block->getBlockId(), $fileContents);
                 // Save it for later
                 $blocks[$i] = $block;
             }
             // Close file
             fclose($handle);
             // Set Block Blob's content type and metadata
             $commitBlockBlobOptions = new CommitBlobBlocksOptions();
             $commitBlockBlobOptions->setBlobContentType($blobContentType);
             $commitBlockBlobOptions->setMetadata($metadata);
             // Commit the block list
             $blobRestProxy->commitBlobBlocks($containerName, $blobName, $blocks, $commitBlockBlobOptions);
             if ($is_large_file) {
                 // Delete large temp files when we're done
                 try {
                     //TODO: add option to keep this file if so desired
                     if (self::blob_exists_in_container($blobName, $containerName)) {
                         wp_delete_file($localFileName);
                         // Dispose file contents
                         $fileContents = null;
                         unset($fileContents);
                     } else {
                         throw new Exception(sprintf(__('The blob %1$2 was not uploaded to container %2$2. Please try again.', 'windows-azure-storage'), $blobName, $containerName));
                     }
                 } catch (Exception $ex) {
                     echo '<p class="notice">' . esc_html($ex->getMessage()) . '</p>';
                 }
             }
         }
     } catch (ServiceException $exception) {
         if (!$handle) {
             fclose($handle);
         }
         throw $exception;
     }
 }
Esempio n. 6
0
 /**
  * Загрузка Blob в контейнер
  * 
  * @param type $filepath
  * @return boolean
  * @throws Exception
  */
 public function create($filepath)
 {
     $this->setFilePath($filepath);
     $this->createContainerIfPossible();
     $fullpath = "{$this->filePrefix}/{$this->filepath}";
     // возвращает mime-тип
     $finfo = finfo_open(FILEINFO_MIME_TYPE);
     $mime = finfo_file($finfo, $fullpath);
     finfo_close($finfo);
     if (!$mime) {
         throw new Exception("Not found mime-type: {$fullpath}");
     }
     $content = fopen($fullpath, "r");
     if (!$content) {
         throw new Exception("Cant open file: {$fullpath}");
     }
     $options = new CreateBlobOptions();
     $options->setBlobContentType($mime);
     //Передача blob-объекта
     $this->blobRestProxy->createBlockBlob($this->containerName, $this->blobName, $content, $options);
     return true;
 }
 /**
  * @covers WindowsAzure\Blob\Models\CreateBlobOptions::setBlobContentType
  * @covers WindowsAzure\Blob\Models\CreateBlobOptions::getBlobContentType
  */
 public function testSetBlobContentType()
 {
     // Setup
     $expected = '0x8CAFB82EFF70C46';
     $options = new CreateBlobOptions();
     $options->setBlobContentType($expected);
     // Test
     $options->setBlobContentType($expected);
     // Assert
     $this->assertEquals($expected, $options->getBlobContentType());
 }
Esempio n. 8
0
 public function actionUploadPhoto()
 {
     file_put_contents("/var/log/nginx/test/1.txt", print_r($_REQUEST), FILE_APPEND);
     if (isset($_GET['recipe_id']) && (int) $_GET['recipe_id'] > 0 && isset($_GET['user_id']) && (int) $_GET['user_id'] > 0 && !empty($_FILES['uploaded_file'])) {
         $id = (int) $_GET['recipe_id'];
         $user_id = (int) $_GET['user_id'];
         $connectionString = "DefaultEndpointsProtocol=http;AccountName=trecipes;AccountKey=FoleK8mHGV5MaOvnJaZV6MFD7WadIEc12SL5hhwj7h949ysaXcp7VeTHimfQt6qxSwdQIEVkba0NQ/o58cgdXw==";
         // Create blob REST proxy.
         $blobRestProxy = ServicesBuilder::getInstance()->createBlobService($connectionString);
         $options = new CreateBlobOptions();
         $options->setBlobContentType("image/jpeg");
         $blob_name = md5(time()) . ".jpg";
         //system("convert ".$_FILES['uploaded_file']['tmp_name']." -resize 600x600 ".$_FILES['uploaded_file']['tmp_name']);
         $content = fopen($_FILES['uploaded_file']['tmp_name'], "r");
         $blobRestProxy->createBlockBlob("photos", $blob_name, $content, $options);
         VF::app()->database->query("INSERT INTO recipes_photos (recipe_id, user_id, url) VALUES ({$id},{$user_id},'http://s1.resepte.net/photos/{$blob_name}')");
     }
 }
 /**
  * @covers WindowsAzure\Blob\BlobRestProxy::createPageBlob
  * @covers WindowsAzure\Blob\BlobRestProxy::getBlob
  */
 public function testGetPageBlobWorks()
 {
     // Act
     $opts = new CreateBlobOptions();
     $opts->setBlobCacheControl('test');
     $opts->setBlobContentEncoding('UTF-8');
     $opts->setBlobContentLanguage('en-us');
     // $opts->setBlobContentMD5('1234');
     $opts->setBlobContentType('text/plain');
     $opts->setCacheControl('test');
     $opts->setContentEncoding('UTF-8');
     // $opts->setContentMD5('1234');
     $opts->setContentType('text/plain');
     $this->restProxy->createPageBlob(self::$_test_container_for_blobs, 'test', 4096, $opts);
     $result = $this->restProxy->getBlob(self::$_test_container_for_blobs, 'test');
     // Assert
     $this->assertNotNull($result, '$result');
     $this->assertNotNull($result->getMetadata(), '$result->getMetadata()');
     $this->assertEquals(0, count($result->getMetadata()), 'count($result->getMetadata())');
     $props = $result->getProperties();
     $this->assertEquals('test', $props->getCacheControl(), '$props->getCacheControl()');
     $this->assertEquals('UTF-8', $props->getContentEncoding(), '$props->getContentEncoding()');
     $this->assertEquals('en-us', $props->getContentLanguage(), '$props->getContentLanguage()');
     $this->assertEquals('text/plain', $props->getContentType(), '$props->getContentType()');
     $this->assertEquals(4096, $props->getContentLength(), '$props->getContentLength()');
     $this->assertNotNull($props->getETag(), '$props->getETag()');
     $this->assertNull($props->getContentMD5(), '$props->getContentMD5()');
     $this->assertNotNull($props->getLastModified(), '$props->getLastModified()');
     $this->assertEquals('PageBlob', $props->getBlobType(), '$props->getBlobType()');
     $this->assertEquals('unlocked', $props->getLeaseStatus(), '$props->getLeaseStatus()');
     $this->assertEquals(0, $props->getSequenceNumber(), '$props->getSequenceNumber()');
     $this->assertEquals(4096, strlen(stream_get_contents($result->getContentStream())), 'strlen($result->getContentStream())');
 }
 /**
  * Upload the given file to an azure storage container as a block blob.
  * Block blobs let us upload large blobs efficiently. Block blobs are comprised of blocks,
  * each of which is identified by a block ID. This allows create (or modify) a block blob
  * by writing a set of blocks and committing them by their block IDs.
  * If we are writing a block blob that is no more than 64 MB in size, you can upload it
  * in its entirety with a single write operation.
  * When you upload a block to a blob in your storage account, it is associated with the
  * specified block blob, but it does  not become part of the blob until you commit a list
  * of blocks that includes the new block's ID.
  *
  * @param string            $containerName      Container name
  *
  * @param string            $blobName           Blob name
  *
  * @param string            $localFileName      Path to local file to be uploaded
  *
  * @param string            $blobContentType    Content type of the blob
  *
  * @param array             $metadata           Array of metadata
  *
  * @return void
  *
  * @throws ServiceException
  */
 public static function putBlockBlob($containerName, $blobName, $localFileName, $blobContentType = null, $metadata = array())
 {
     $copyBlobResult = null;
     // Open file
     $handle = fopen($localFileName, 'r');
     if ($handle === false) {
         throw new Exception('Could not open the local file ' . localFileName);
     }
     $blobRestProxy = WindowsAzureStorageUtil::getStorageClient();
     try {
         if (filesize($localFileName) < self::MAX_BLOB_SIZE) {
             $createBlobOptions = new CreateBlobOptions();
             $createBlobOptions->setBlobContentType($blobContentType);
             $createBlobOptions->setMetadata($metadata);
             $blobRestProxy->createBlockBlob($containerName, $blobName, $handle, $createBlobOptions);
             fclose($handle);
         } else {
             // Determine number of page blocks
             $numberOfBlocks = ceil(filesize($localFileName) / self::MAX_BLOB_TRANSFER_SIZE);
             // Generate block id's
             $blocks = array();
             for ($i = 0; $i < $numberOfBlocks; $i++) {
                 $blocks[$i] = new Block();
                 $blocks[$i]->setBlockId(self::_generateBlockId($i));
                 $blocks[$i]->setType(BlobBlockType::LATEST_TYPE);
             }
             // Upload blocks
             for ($i = 0; $i < $numberOfBlocks; $i++) {
                 // Seek position in file
                 fseek($handle, $i * self::MAX_BLOB_TRANSFER_SIZE);
                 // Read contents
                 $fileContents = fread($handle, self::MAX_BLOB_TRANSFER_SIZE);
                 // Put block
                 $blobRestProxy->createBlobBlock($containerName, $blobName, $blocks[$i]->getBlockId(), $fileContents);
                 // Dispose file contents
                 $fileContents = null;
                 unset($fileContents);
             }
             // Close file
             fclose($handle);
             // Set Block Blob's content type and metadata
             $commitBlockBlobOptions = new CommitBlobBlocksOptions();
             $commitBlockBlobOptions->setBlobContentType($blobContentType);
             $commitBlockBlobOptions->setMetadata($metadata);
             // Commit the block list
             $blobRestProxy->commitBlobBlocks($containerName, $blobName, $blocks, $commitBlockBlobOptions);
         }
     } catch (ServiceException $exception) {
         if (!$handle) {
             fclose($handle);
         }
         throw $exception;
     }
 }