Передача объектов в хранилище BLOB-объектов Azure и обратно с помощью PHP

Из этого краткого руководства вы узнаете, как использовать PHP для передачи, скачивания и перечисления блочных BLOB-объектов в контейнере в хранилище BLOB-объектов Azure.

Предварительные требования

Для доступа к службе хранилища Azure требуется подписка Azure. Если у вас еще нет подписки, создайте бесплатную учетную запись Azure, прежде чем начинать работу.

Доступ к хранилищу Azure осуществляется с помощью учетной записи хранения. Для работы с этим руководством создайте учетную запись хранения с помощью портала Azure, Azure PowerShell или Azure CLI. Инструкции по созданию учетной записи хранения см. в статье Создайте учетную запись хранения.

Прежде чем приступить к работе, убедитесь, что у вас установлены следующие дополнительные компоненты:

Загрузка примера приложения

В этом кратком руководстве как пример используется простое приложение PHP.

Используйте команду git, чтобы скачать копию приложения в среду разработки.

git clone https://github.com/Azure-Samples/storage-blobs-php-quickstart.git

Эта команда клонирует репозиторий в локальную папку git. Чтобы открыть пример приложения PHP, найдите папку storage-blobs-php-quickstart и откройте файл phpqs.php.

Копирование учетных данных с портала Azure

Чтобы использовать пример приложения, вам нужно авторизоваться для получения доступа к своей учетной записи хранения. Предоставьте приложению учетные данные учетной записи хранения в виде строки подключения. Просмотр учетных данных учетной записи хранения:

  1. Войдите в свою учетную запись хранения на портале Azure.

  2. На странице сведений об учетной записи хранения в разделе Настройка выберите Ключи доступа, чтобы отобразить ключи доступа к учетной записи и строку подключения.

  3. Запишите имя учетной записи хранения, которое понадобится вам при авторизации.

  4. Найдите значение ключа в разделе key1 и выберите Копировать, чтобы скопировать ключ учетной записи.

    Снимок экрана, на котором показано, как скопировать ключ учетной записи с портала Azure

Настройка строки подключения хранилища

В приложении нужно указать имя и ключ учетной записи хранения, чтобы создать экземпляр BlobRestProxy для вашего приложения. Рекомендуем хранить эти идентификаторы в переменной среды на локальном компьютере, где выполняется приложение. Чтобы создать переменную среды, используйте один из следующих примеров в зависимости от операционной системы. Замените строки youraccountname и youraccountkey фактическими значениями имени и ключа учетной записи.

export ACCOUNT_NAME=<youraccountname>
export ACCOUNT_KEY=<youraccountkey>

Настройка среды

Перенесите папку из локальной папки git в каталог, который обслуживается сервером PHP. Затем откройте командную строку, перейдите в тот же каталог и введите: php composer.phar install.

Запуск примера

Этот пример создает тестовый файл в папке " ". Пример программы отправляет тестовый файл в хранилище BLOB-объектов, выводит списокBLOB-объектов в контейнере и скачивает файл с новым именем.

Запустите образец. Ниже представлен пример выходных данных, которые возвращаются при выполнении этого приложения.

Uploading BlockBlob: HelloWorld.txt
These are the blobs present in the container: HelloWorld.txt: https://myexamplesacct.blob.core.windows.net/blockblobsleqvxd/HelloWorld.txt

This is the content of the blob uploaded: Hello Azure!

Когда вы нажмете появившуюся кнопку, пример программы удалит контейнер хранилища и файлы. Прежде чем продолжить, проверьте наличие двух файлов в папке сервера. Вы можете открыть их и убедиться, что они идентичны.

Для просмотра файлов в хранилище BLOB-объектов можно также воспользоваться таким средством, как обозреватель службы хранилища Azure. Обозреватель службы хранилища Azure — это бесплатное кроссплатформенное средство для доступа к данным учетной записи хранения.

После проверки файлов нажмите любую клавишу для завершения демонстрации и удаления тестовых файлов. Теперь, когда известны функциональные возможности примера, откройте файл example.rb, чтобы просмотреть код.

Разбор примера кода

Разберем пример кода, чтобы понять, как он работает.

Получение ссылок на объекты хранилища

Сначала необходимо создать ссылки на объекты, используемые для доступа к хранилищу BLOB-объектов и управлению им. Эти объекты зависят друг от друга, и каждый из них используется следующим в списке объектом.

  • Создайте экземпляр объекта BlobRestProxy службы хранилища Azure, чтобы настроить учетные данные для подключения.
  • Создайте объект BlobService, указывающий на службу BLOB-объектов в вашей учетной записи хранения.
  • Создайте объект Container, представляющий контейнер, к которому осуществляется доступ. Контейнеры используются для организации BLOB-объектов аналогично папкам для упорядочения файлов на компьютере.

Теперь, когда у вас есть объект контейнер blobClient, вы можете создать блочный BLOB-объект, который указывает на конкретный интересующий вас большой двоичный объект. После этого можно выполнить такие операции как, передача, загрузка и копирование.

Важно!

Имена контейнеров должны состоять из знаков нижнего регистра. Дополнительные сведения об именовании контейнеров и больших двоичных объектов см. в статье Naming and Referencing Containers, Blobs, and Metadata (Именование контейнеров, больших двоичных объектов и метаданных и ссылка на них).

В этом разделе вы настроите экземпляр клиента службы хранилища Azure, создадите экземпляр объекта службы BLOB-объектов и контейнер, а затем зададите для контейнера разрешения на общий доступ к большим двоичным объектам. Контейнер называется quickstartblobs.

    # Setup a specific instance of an Azure::Storage::Client
    $connectionString = "DefaultEndpointsProtocol=https;AccountName=".getenv('account_name').";AccountKey=".getenv('account_key');

    // Create blob client.
    $blobClient = BlobRestProxy::createBlobService($connectionString);

    # Create the BlobService that represents the Blob service for the storage account
    $createContainerOptions = new CreateContainerOptions();

    $createContainerOptions->setPublicAccess(PublicAccessType::CONTAINER_AND_BLOBS);

    // Set container metadata.
    $createContainerOptions->addMetaData("key1", "value1");
    $createContainerOptions->addMetaData("key2", "value2");

    $containerName = "blockblobs".generateRandomString();

    try    {
        // Create container.
        $blobClient->createContainer($containerName, $createContainerOptions);

Отправка BLOB-объектов в контейнер

Хранилище BLOB-объектов поддерживает блочные, добавочные и страничные BLOB-объекты. Чаще всего используются блочные BLOB-объекты. Именно этот тип представлен в этом кратком руководстве.

Чтобы отправить файл в BLOB-объект, получите полный путь к файлу, соединив имя каталога и имя файла на локальном диске. Затем вы можете передать файл по указанному пути, используя метод createBlockBlob() .

В примере кода используется локальный файл, который передается в Azure. В коде файл хранится под именем myfile, а большой двоичный объект под именем fileToUpload. В приведенном ниже примере файл отправляется в контейнер с именем quickstartblobs.

    $myfile = fopen("HelloWorld.txt", "w") or die("Unable to open file!");
    fclose($myfile);

    # Upload file as a block blob
    echo "Uploading BlockBlob: ".PHP_EOL;
    echo $fileToUpload;
    echo "<br />";

    $content = fopen($fileToUpload, "r");

    //Upload blob
    $blobClient->createBlockBlob($containerName, $fileToUpload, $content);

Чтобы выполнить частичное обновление содержимого блочного BLOB-объекта, используйте метод createblocklist() . Блочные BLOB-объекты могут иметь размер 4,7 ТБ и представлять собой любые объекты, начиная от электронных таблиц Excel до больших видеофайлов. Страничные BLOB-объекты в основном используются для файлов виртуального жесткого диска, применяемых для поддержки виртуальных машин IaaS. Добавочные BLOB-объекты используются для ведения журнала, например если требуется выполнить запись в файл и затем добавлять дополнительные сведения. Добавочные BLOB-объекты должны использоваться в модели с одним средством записи. Большинство объектов, находящихся в хранилище BLOB-объектов, представляют собой блочные BLOB-объекты.

Перечисление BLOB-объектов в контейнере

Список файлов в контейнере можно получить с помощью метода listBlobs() . Следующий код извлекает список BLOB-объектов и поочередно перебирает их, отображая имена найденных в контейнере BLOB-объектов.

    $listBlobsOptions = new ListBlobsOptions();
    $listBlobsOptions->setPrefix("HelloWorld");

    echo "These are the blobs present in the container: ";

    do{
        $result = $blobClient->listBlobs($containerName, $listBlobsOptions);
        foreach ($result->getBlobs() as $blob)
        {
            echo $blob->getName().": ".$blob->getUrl()."<br />";
        }

        $listBlobsOptions->setContinuationToken($result->getContinuationToken());
    } while($result->getContinuationToken());

Получение содержимого больших двоичных объектов

Получите содержимое больших двоичных объектов с помощью метода getBlob(). Следующий код отображает содержимое большого двоичного объекта, который мы передали в предыдущем разделе.

    $blob = $blobClient->getBlob($containerName, $fileToUpload);
    fpassthru($blob->getContentStream());

Очистка ресурсов

Если вам больше не нужны большие двоичные объекты, отправленные при работе с этим руководством, удалите весь контейнер с помощью метода deleteContainer() . Если вам больше не нужны созданные файлы, удалите их с помощью метода deleteBlob() .

    // Delete blob.
    echo "Deleting Blob".PHP_EOL;
    echo $fileToUpload;
    echo "<br />";
    $blobClient->deleteBlob($_GET["containerName"], $fileToUpload);

    // Delete container.
    echo "Deleting Container".PHP_EOL;
    echo $_GET["containerName"].PHP_EOL;
    echo "<br />";
    $blobClient->deleteContainer($_GET["containerName"]);

    //Deleting local file
    echo "Deleting file".PHP_EOL;
    echo "<br />";
    unlink($fileToUpload);   

Ресурсы для разработки приложений PHP с большими двоичными объектами

Ознакомьтесь со следующими дополнительными ресурсами для разработки PHP с использованием хранилища BLOB-объектов:

Дальнейшие действия

В этом кратком руководстве вы узнали, как передавать файлы между локальным диском и хранилищем BLOB-объектов Azure с помощью PHP. Чтобы узнать подробнее о работе с PHP, перейдите на сайт Центра разработчиков PHP.

Дополнительные сведения об обозревателе объектов и BLOB-объектах см. в статье Управление ресурсами хранилища BLOB-объектов Azure с помощью обозревателя хранилищ.