Zend_Service_WindowsAzure_Storage_Blob Blob Speicher speichert ein Set von Binären Daten. Blog Speicher bietet die folgenden drei Ressourcen an: den Speicher Account, Container und Blobs. Im eigenen Speicher Account bieten Container einen Weg um Sets von Blobs im Speicher Account zu organisieren. Blog Speicher wird von Windows Azure als REST API angeboten welcher von der Klasse Zend_Service_WindowsAzure_Storage_Blob umhüllt ist um ein natives PHP Interface zum Speicher Account zu bieten. API Beispiele Dieser Abschnitt zeigt einige Beispiele der Verwendung der Klasse Zend_Service_WindowsAzure_Storage_Blob. Andere Features sind im Download Paket vorhanden sowie in der detailierten API Dokumentation dieser Features. Erstellung einer Speicher Containers Bei Verwendung des folgenden Codes kann ein Speicher Container auf dem Development Speicher erstellt werden. Erstellung eines Speicher Containers createContainer('testcontainer'); echo 'Der Name des Containers ist: ' . $result->Name; ]]> Löschen eines Speicher Containers Bei Verwendung des folgenden Codes kann ein Blob Speicher Container vom Development Speicher entfernt werden. Löschen eines Speicher Containers deleteContainer('testcontainer'); ]]> Speichern eines Blobs Bei Verwendung des folgenden Codes kann ein Blob zu einem Blog Speicher Container auf dem Development Speichers hochgeladen werden. Es ist zu beachten das der Container hierfür bereits vorher erstellt worden sein muss. Speichern eines Blobs putBlob( 'testcontainer', 'example.txt', '/home/maarten/example.txt' ); echo 'Der Name des Blobs ist: ' . $result->Name; ]]> Kopieren eines Blobs Bei Verwendung des folgenden Codes kann ein Blob von innerhalb des Speicher Accounts kopiert werden. Der Vorteil der Verwendung dieser Methode besteht darin das die Kopieroperation in der Azure Wolke stattfindet und kein Downloaden vom Blob stattfinden muss. Es ist zu beachten das in diesem Fall der Container bereits vorher erstellt worden sein muss. Kopieren eines Blobs copyBlob( 'testcontainer', 'example.txt', 'testcontainer', 'example2.txt' ); echo 'Der Name des kopierten Blobs ist: ' . $result->Name; ]]> Herunterladen eines Blobs Bei Verwendung des folgenden Codes kann ein Blob von einem Blob Speicher Container auf den Development Speicher heruntergeladen werden. Es ist zu beachten das der Container hierfür bereits vorher erstellt wurden sein und ein Blob darauf hochgeladen sein muss. Herunterladen eines Blobs getBlob( 'testcontainer', 'example.txt', '/home/maarten/example.txt' ); ]]> Einen Blob öffentlich verfügbar machen By default, blob storage containers on Windows Azure are protected from public viewing. If any user on the Internet should have access to a blob container, its ACL can be set to public. Note that this applies to a complete container and not to a single blob! Using the following code, blob storage container ACL can be set on development storage. Note that the container has already been created before. Making a blob publicly available setContainerAcl('testcontainer', Zend_Service_WindowsAzure_Storage_Blob::ACL_PUBLIC); ]]> Root container Windows Azure Blob Storage provides support to work with a "root container". This means that a blob can be stored in the root of your storage account, i.e. http://myaccount.blob.core.windows.net/somefile.txt. In order to work with the root container, it should first be created using the createContainer() method, naming the container $root. All other operations on the root container should be issued with the container name set to $root. Blob storage stream wrapper The Windows Azure SDK for PHP provides support for registering a blob storage client as a PHP file stream wrapper. The blob storage stream wrapper provides support for using regular file operations on Windows Azure Blob Storage. For example, one can open a file from Windows Azure Blob Storage with the fopen() function: Example usage of blob storage stream wrapper In order to do this, the Windows Azure SDK for PHP blob storage client must be registered as a stream wrapper. This can be done by calling the registerStreamWrapper() method: Registering the blob storage stream wrapper registerStreamWrapper(); // registers azure:// on this storage client // or: $storageClient->registerStreamWrapper('blob://'); // regiters blob:// on this storage client ]]> To unregister the stream wrapper, the unregisterStreamWrapper() method can be used. Shared Access Signature Windows Azure Bob Storage provides a feature called "Shared Access Signatures". By default, there is only one level of authorization possible in Windows Azure Blob Storage: either a container is private or it is public. Shared Access Signatures provide a more granular method of authorization: read, write, delete and list permissions can be assigned on a container or a blob and given to a specific client using an URL-based model. An example would be the following signature: 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 The above signature gives write access to the "phpazuretestshared1" container of the "phpstorage" account. Generating a Shared Access Signature When you are the owner of a Windows Azure Bob Storage account, you can create and distribute a shared access key for any type of resource in your account. To do this, the generateSharedAccessUrl() method of the Zend_Service_WindowsAzure_Storage_Blob storage client can be used. The following example code will generate a Shared Access Signature for write access in a container named "container1", within a timeframe of 3000 seconds. Generating a Shared Access Signature for a container generateSharedAccessUrl( 'container1', '', 'c', 'w', $storageClient ->isoDate(time() - 500), $storageClient ->isoDate(time() + 3000) ); ]]> The following example code will generate a Shared Access Signature for read access in a blob named test.txt in a container named "container1" within a time frame of 3000 seconds. Generating a Shared Access Signature for a blob generateSharedAccessUrl( 'container1', 'test.txt', 'b', 'r', $storageClient ->isoDate(time() - 500), $storageClient ->isoDate(time() + 3000) ); ]]> Working with Shared Access Signatures from others When you receive a Shared Access Signature from someone else, you can use the Windows Azure SDK for PHP to work with the addressed resource. For example, the following signature can be retrieved from the owner of a storage account: 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 The above signature gives write access to the "phpazuretestshared1" "container" of the phpstorage account. Since the shared key for the account is not known, the Shared Access Signature can be used to work with the authorized resource. Consuming a Shared Access Signature for a container 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' ); ]]> Note that there was no explicit permission to write to a specific blob. Instead, the Windows Azure SDK for PHP determined that a permission was required to either write to that specific blob, or to write to its container. Since only a signature was available for the latter, the Windows Azure SDK for PHP chose those credentials to perform the request on Windows Azure blob storage.