Transferencia de objetos hacia Azure Blob Storage, y desde él, mediante PHP

En esta guía de inicio rápido, aprenderá a usar PHP para cargar, descargar y enumerar blobs en bloques en un contenedor en Azure Blob Storage.

Requisitos previos

Para acceder a Azure Storage, necesitará una suscripción de Azure. Si todavía no tiene una suscripción, cree una cuenta gratuita antes de empezar.

Todo el acceso a Azure Storage tiene lugar mediante una cuenta de almacenamiento. En este inicio rápido, cree una cuenta de almacenamiento con Azure Portal, Azure PowerShell o la CLI de Azure. Si necesita ayuda para crear una cuenta de almacenamiento, consulte Creación de una cuenta de almacenamiento.

Asegúrese de tener instalados los siguientes requisitos previos adicionales:

Descarga de la aplicación de ejemplo

La aplicación de ejemplo utilizada en esta guía de inicio rápido es una aplicación PHP básica.

Use git para descargar una copia de la aplicación en su entorno de desarrollo.

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

Este comando clona el repositorio en la carpeta git local. Para abrir la aplicación de ejemplo PHP, busque la carpeta storage-blobs-ruby-quickstart y abra el archivo example.rb.

Copia de las credenciales desde Azure Portal

La aplicación de ejemplo debe autorizar el acceso a su cuenta de almacenamiento. Proporcione las credenciales de la cuenta de almacenamiento a la aplicación en forma de una cadena de conexión. Para ver las credenciales de la cuenta de almacenamiento:

  1. En Azure Portal, vaya a la cuenta de almacenamiento.

  2. En la sección Configuración de la información general de la cuenta de almacenamiento, seleccione Claves de acceso para mostrar las claves de acceso y la cadena de conexión de la cuenta.

  3. Anote el nombre de la cuenta de almacenamiento, lo necesitará para la autorización.

  4. Busque el valor de Clave en key1 y seleccione Copiar para copiar la clave de la cuenta.

    Captura de pantalla que muestra cómo copiar la clave de cuenta desde Azure Portal

Configuración de la cadena de conexión de almacenamiento.

En la aplicación, debe proporcionar el nombre y la clave de la cuenta de almacenamiento para crear la instancia BlobRestProxy de la aplicación. Se recomienda almacenar estos identificadores dentro de una variable de entorno en la máquina local que ejecuta la aplicación. Utilice uno de los estos ejemplos dependiendo de su sistema operativo para crear la variable de entorno. Reemplace los valores youraccountname y youraccountkey con el nombre de cuenta y la clave.

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

Configurar su entorno

Tome la carpeta de su carpeta local git y colóquela en un directorio proporcionado por su servidor PHP. Después, abra un símbolo del sistema en ese mismo directorio y escriba: php composer.phar install

Ejecución del ejemplo

En este ejemplo se crea un archivo de prueba en la carpeta '.'. El programa de ejemplo carga el archivo de prueba en Blob Storage, enumera los blobs en el contenedor y descarga el archivo con un nuevo nombre.

Ejecute el ejemplo. La salida siguiente es un ejemplo de la salida devuelta al ejecutar la aplicación:

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!

Al presionar el botón mostrado, el programa de ejemplo elimina el contenedor de almacenamiento y los archivos. Antes de continuar, compruebe la carpeta del servidor de los dos archivos. Puede abrirlos y ver que son idénticas.

También puede usar una herramienta como Explorador de Azure Storage para ver los archivos de Blob Storage. El Explorador de Azure Storage es una herramienta gratuita multiplataforma que permite acceder a la información de la cuenta de almacenamiento.

Después de haber comprobado los archivos, presione cualquier tecla para finalizar la demostración y eliminar los archivos de prueba. Ahora que sabe lo que hace el ejemplo, abra el archivo example.rb para examinar el código.

Descripción del código de ejemplo

A continuación, explicaremos el código de ejemplo para ayudarle a comprender saber cómo funciona.

Obtención de referencias a los objetos de almacenamiento

Lo primero que hay que hacer es crear las referencias a los objetos usados para acceder a Blob Storage y administrarlo. Estos objetos dependen unos de otros, y cada uno es utilizado por el siguiente de la lista.

  • Cree una instancia del objeto BlobRestProxy de Azure Storage para configurar las credenciales de conexión.
  • Cree el objeto BlobService, que apunte a Blob service en la cuenta de almacenamiento.
  • Cree el objeto Container, que representa el contenedor al que está accediendo. Los contenedores se usan para organizar los blobs al igual que se usan las carpetas en el equipo para organizar los archivos.

Una vez que tenga el objeto de contenedor blobClient, puede crear el objeto de blob Block que apunte al blob específico en el que está interesado. Después, puede realizar operaciones como carga, descarga y copia.

Importante

Los nombres de contenedor deben estar en minúsculas. Para más información sobre la nomenclatura de contenedores y blobs, consulte Naming and Referencing Containers, Blobs, and Metadata (Asignación de nombres y referencia a contenedores, blobs y metadatos).

En esta sección, se configura una instancia del cliente de Azure Storage, se crean instancias de los objetos, se crea un contenedor y se establecen permisos en el contenedor para que los blobs sean públicos. El contenedor se denomina 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);

Carga de blobs al contenedor

Blob Storage admite blobs en bloques, blobs en anexos y blobs en páginas. Los blobs en bloques son los que se usan con más frecuencia y serán los que utilicemos en este tutorial de inicio rápido.

Para cargar un archivo en un blob, obtenga la ruta de acceso completa del archivo combinando el nombre del directorio y el nombre de archivo en la unidad local. A continuación, puede cargar el archivo en la ruta de acceso especificada con el método createBlockBlob() .

El código de ejemplo toma un archivo local y lo carga en Azure. El archivo se almacena como myfile y el nombre del blob como fileToUpload en el código. En el ejemplo siguiente se carga el archivo al contenedor denominado 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);

Para realizar una actualización parcial del contenido de un blob en bloques, utilice el método createblocklist() . Los blobs en bloques pueden tener un tamaño de hasta 4,7 TB y pueden ser cualquier cosa, desde hojas de cálculo de Excel a archivos de vídeo grandes. Los blobs en páginas se utilizan principalmente para los archivos VHD usados para respaldar VM IaaS. Los blobs en anexos se utilizan para el registro, por ejemplo, cuando desea escribir en un archivo y luego sigue agregando más información. Los blobs en anexos deben usarse en un modelo de escritura único. La mayoría de los objetos almacenados en Blob Storage son blobs en bloques.

Enumerar los blobs de un contenedor

Puede obtener una lista de archivos del contenedor con el método listBlobs() . El código siguiente recupera la lista de blobs, luego los recorre y se muestran los nombres de los blobs encontrados en un contenedor.

    $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());

Obtención del contenido de los blobs

Obtenga el contenido de los blobs mediante el método getBlob(). El código siguiente muestra el contenido del blob cargado en una sección anterior.

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

Limpieza de recursos

Si ya no necesita los blobs cargados en esta guía de inicio rápido, puede eliminar todo el contenedor mediante el método deleteContainer() . Si ya no necesita los archivos creados, use el método deleteBlob() para eliminarlos.

    // 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);   

Recursos para el desarrollo de aplicaciones PHP con blobs

Consulte estos recursos adicionales para el desarrollo de PHP con Blob Storage:

Pasos siguientes

En esta guía de inicio rápido, ha aprendido a transferir archivos entre un disco local y Azure Blob Storage mediante PHP. Para más información acerca de cómo trabajar con PHP, vaya nuestro Centro para desarrolladores de PHP.

Para más información sobre el Explorador de Storage y los blobs, consulte Administración de recursos de Azure Blob Storage con el Explorador de Storage (versión preliminar).