Blob Storage almacena conjuntos de datos binarios. Blob Storage ofrece los siguientes tres recursos: la cuenta de almacenamiento, los contenedores y los blobs. Dentro de su cuenta de almacenamiento, los contenedores proporcionan una forma de organizar conjuntos de blobs dentro de su cuenta de almacenamiento.
Blob Storage es ofrecido por Windows Azure como una API REST
que está envuelta por la clase Zend_Service_WindowsAzure_Storage_Blob
con el fin de proporcionar una interfaz nativa de PHP para la cuenta de almacenamiento.
Este tema enumera algunos ejemplos del uso de la clase
Zend_Service_WindowsAzure_Storage_Blob. Otras funciones están
disponibles en el paquete de descarga, así como documentación detallada de la
API de dichas funciones.
Utilizando el siguiente código, se puede crear un contenedor de blob storage en el almacenamiento de desarrollo.
Ejemplo 64.151. Creación de un contenedor de almacenamiento
$storageClient = new Zend_Service_WindowsAzure_Storage_Blob();
$result = $storageClient->createContainer('testcontainer');
echo 'Container name is: ' . $result->Name;
Utilizando el siguiente código, se puede eliminar un contenedor de blob storage del almacenamiento de desarrollo.
Ejemplo 64.152. Eliminación de un contenedor de almacenamiento
$storageClient = new Zend_Service_WindowsAzure_Storage_Blob();
$storageClient->deleteContainer('testcontainer');
Utilizando el siguiente código, se puede subir un blob a un contenedor de blob storage en el almacenamiento de desarrollo. Tenga en cuenta que el contenedor ya se ha creado previamente.
Ejemplo 64.153. Almacenar un blob
$storageClient = new Zend_Service_WindowsAzure_Storage_Blob();
// upload /home/maarten/example.txt to Azure
$result = $storageClient->putBlob(
'testcontainer', 'example.txt', '/home/maarten/example.txt'
);
echo 'Blob name is: ' . $result->Name;
Utilizando el siguiente código, se puede copiar un blob dentro de la cuenta de almacenamiento. La ventaja de utilizar este método es que la operación de copia se realiza en la nube de Azure y no implica descargar el blob. Tenga en cuenta que el contenedor ya se ha creado previamente.
Ejemplo 64.154. Copiar un blob
$storageClient = new Zend_Service_WindowsAzure_Storage_Blob();
// copy example.txt to example2.txt
$result = $storageClient->copyBlob(
'testcontainer', 'example.txt', 'testcontainer', 'example2.txt'
);
echo 'Copied blob name is: ' . $result->Name;
Utilizando el siguiente código, se puede descargar un blob desde un contenedor de blob storage en el almacenamiento de desarrollo. Tenga en cuenta que el contenedor ya se ha creado previamente y que se ha subido un blob.
Ejemplo 64.155. Descargar un blob
$storageClient = new Zend_Service_WindowsAzure_Storage_Blob();
// download file to /home/maarten/example.txt
$storageClient->getBlob(
'testcontainer', 'example.txt', '/home/maarten/example.txt'
);
De forma predeterminada, los contenedores de blob storage en Windows Azure están protegidos de la visualización pública. Si algún usuario de Internet debe tener acceso a un contenedor de blobs, su ACL puede establecerse como público. Tenga en cuenta que esto se aplica a un contenedor completo y no a un único blob.
Utilizando el siguiente código, la ACL del contenedor de blob storage se puede establecer en el almacenamiento de desarrollo. Tenga en cuenta que el contenedor ya se ha creado previamente.
Ejemplo 64.156. Hacer que un blob esté disponible públicamente
$storageClient = new Zend_Service_WindowsAzure_Storage_Blob();
// make container publicly available (enumerate all blobs and read blob data)
$storageClient->setContainerAcl('testcontainer', Zend_Service_WindowsAzure_Storage_Blob::ACL_PUBLIC_CONTAINER);
Windows Azure Blob Storage ofrece soporte para trabajar con un "contenedor raíz".
Esto significa que un blob puede almacenarse en la raíz de su cuenta de almacenamiento,
es decir, http://myaccount.blob.core.windows.net/somefile.txt.
Para poder trabajar con el contenedor raíz, primero debe crearse utilizando el
método createContainer(), nombrando el contenedor
$root. El resto de operaciones sobre el contenedor raíz deben realizarse
con el nombre del contenedor establecido en $root.
El SDK de Windows Azure para PHP ofrece soporte
para registrar un cliente de blob storage como un wrapper de stream de archivos de PHP.
El wrapper de stream de blob storage ofrece soporte para usar operaciones de archivo habituales en
Windows Azure Blob Storage. Por ejemplo, se puede abrir un archivo desde Windows Azure Blob
Storage con la función fopen():
Ejemplo 64.157. Ejemplo de uso del wrapper de stream de blob storage
$fileHandle = fopen('azure://mycontainer/myfile.txt', 'r');
// ...
fclose($fileHandle);
Para poder hacer esto, el cliente de blob storage del SDK de Windows Azure
para PHP debe registrarse como un wrapper de stream. Esto puede hacerse llamando
al método registerStreamWrapper():
Ejemplo 64.158. Registro del wrapper de stream de blob storage
$storageClient = new Zend_Service_WindowsAzure_Storage_Blob();
// registers azure:// on this storage client
$storageClient->registerStreamWrapper();
// or:
// regiters blob:// on this storage client
$storageClient->registerStreamWrapper('blob://');
Para anular el registro del wrapper de stream, puede utilizarse el método
unregisterStreamWrapper().
Windows Azure Bob Storage ofrece una función llamada "Shared Access Signatures" (firmas de acceso compartido). De forma predeterminada, solo hay un nivel de autorización posible en Windows Azure Blob Storage: un contenedor es privado o público. Las Shared Access Signatures ofrecen un método de autorización más granular: los permisos de lectura, escritura, eliminación y listado pueden asignarse a un contenedor o a un blob y otorgarse a un cliente específico mediante un modelo basado en URL.
Un ejemplo sería la siguiente firma:
http://phpstorage.blob.core.windows.net/phpazuretestshared1?st=2009-08-17T09%3A06%3A17Z&se=2009-08-17T09%3A56%3A17Z&sr=c&sp=w&sig=hscQ7Su1nqd91OfMTwTkxabhJSaspx%2BD%2Fz8UqZAgn9s%3D
La firma anterior otorga acceso de escritura al contenedor "phpazuretestshared1" de la cuenta "phpstorage".
Cuando usted es el propietario de una cuenta de Windows Azure Bob Storage, puede crear y
distribuir una clave de acceso compartido para cualquier tipo de recurso de su cuenta. Para ello,
puede utilizarse el método generateSharedAccessUrl() del
cliente de almacenamiento Zend_Service_WindowsAzure_Storage_Blob.
El siguiente ejemplo de código generará una firma de acceso compartido para acceso de escritura en un contenedor llamado "container1", dentro de un plazo de 3000 segundos.
Ejemplo 64.159. Generación de una firma de acceso compartido para un contenedor
$storageClient = new Zend_Service_WindowsAzure_Storage_Blob();
$sharedAccessUrl = $storageClient->generateSharedAccessUrl(
'container1',
'',
'c',
'w',
$storageClient ->isoDate(time() - 500),
$storageClient ->isoDate(time() + 3000)
);
El siguiente ejemplo de código generará una firma de acceso compartido para acceso de lectura
en un blob llamado test.txt en un contenedor llamado "container1"
dentro de un plazo de 3000 segundos.
Ejemplo 64.160. Generación de una firma de acceso compartido para un blob
$storageClient = new Zend_Service_WindowsAzure_Storage_Blob();
$sharedAccessUrl = $storageClient->generateSharedAccessUrl(
'container1',
'test.txt',
'b',
'r',
$storageClient ->isoDate(time() - 500),
$storageClient ->isoDate(time() + 3000)
);
Cuando recibe una firma de acceso compartido de otra persona, puede utilizar el SDK de Windows Azure para PHP para trabajar con el recurso indicado. Por ejemplo, la siguiente firma puede obtenerse del propietario de una cuenta de almacenamiento:
http://phpstorage.blob.core.windows.net/phpazuretestshared1?st=2009-08-17T09%3A06%3A17Z&se=2009-08-17T09%3A56%3A17Z&sr=c&sp=w&sig=hscQ7Su1nqd91OfMTwTkxabhJSaspx%2BD%2Fz8UqZAgn9s%3D
La firma anterior otorga acceso de escritura al "contenedor" "phpazuretestshared1" de la cuenta phpstorage. Dado que la clave compartida de la cuenta no se conoce, la firma de acceso compartido puede utilizarse para trabajar con el recurso autorizado.
Ejemplo 64.161. Uso de una firma de acceso compartido para un contenedor
$storageClient = new Zend_Service_WindowsAzure_Storage_Blob(
'blob.core.windows.net', 'phpstorage', ''
);
$storageClient->setCredentials(
new Zend_Service_WindowsAzure_Credentials_SharedAccessSignature()
);
$storageClient->getCredentials()->setPermissionSet(array(
'http://phpstorage.blob.core.windows.net/phpazuretestshared1?st=2009-08-17T09%3A06%3A17Z&se=2009-08-17T09%3A56%3A17Z&sr=c&sp=w&sig=hscQ7Su1nqd91OfMTwTkxabhJSaspx%2BD%2Fz8UqZAgn9s%3D'
));
$storageClient->putBlob(
'phpazuretestshared1', 'NewBlob.txt', 'C:\Files\dataforazure.txt'
);
Tenga en cuenta que no había un permiso explícito para escribir en un blob específico. En su lugar, el SDK de Windows Azure para PHP determinó que se requería un permiso ya sea para escribir en ese blob específico, o para escribir en su contenedor. Dado que solo había una firma disponible para lo segundo, el SDK de Windows Azure para PHP eligió esas credenciales para realizar la solicitud en Windows Azure blob storage.