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 />"); } } }
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); }
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; } }
/** * Загрузка 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()); }
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; } }