Speicherung von Windows-8-Media-Capturings in Windows Azure Blob Storage
Mit der Windows Azure Storage Client Library steht für Windows RT eine API zur Verfügung, mit deren Hilfe aus Windows Store Apps heraus sehr leicht Zugriffe auf Windows Azure Storage möglich sind. Mit wenigen Zeilen Code können Windows Azure Blob, Table und Queue Service angesprochen werden. Dies soll im folgenden demonstriert werden. Folgendes Szenario soll abgebildet werden:
- In einer Windows 8 sollen über die Kamera eines Endgeräts Capturings von Bildern und Videos möglich sein.
- Die aufgenommenen Mediendaten sollen in den Blob-Storage eines Windows Azure Storage Accounts geschrieben werden.
Um das Beispiel einfach zu halten, sollen Sicherheitsfunktionen (Zugriffsschutz der Mediendaten) unberücksichtigt bleiben.
Voraussetzungen
- Visual Studio 2012
- Windows Azure Storage Client Library for Windows 8
- Windows Azure Account (geeignet ist auch der 90-Tage-Azure-Testaccount)
Anlegen eines Windows Azure Storage Accounts
Öffnen Sie das Windows Azure Management Portal (https://manage.windowsazure.com/) und authentifizieren Sie sich.
Legen Sie einen neuen Windows Azure Storage Account an. Klicken Sie auf die Schaltfläche New und wählen Sie den Menüpunkt Storage / Quick Create.
Vergeben Sie für den Storage-Account einen URL-Präfix und wählen Sie den Standort für die Datenspeicherung. Bestätigen Sie dann Ihre Eingabe mit Create Storage Account. Nach ein paar Sekunden ist der Storage Account angelegt.Notieren Sie sich nun die Zugangsdaten für den Storage Account. Wählen Sie im Portal den soeben angelegten Account aus und klicken Sie unten auf die Schaltfläche Manage Keys.
Es öffnet sich eine Maske, in dem drei Werte angezeigt werden: der Storage Account Name sowie der primäre und der sekundäre Zugriffsschlüssel.
Kopieren Sie sich die Werte für den Account-Namen und den primären Zugriffsschlüssel in die Zwischenablage. Diese beiden Werte werden gleich von der Windows-Store-Anwendung benötigt, um sich beim Blob-Storage zu authentifizieren.
Implementierung der Anwendung
Öffnen Sie Visual Studio.
Legen Sie eine neue Solution für die Windows 8 Anwendung an. Wählen Sie hierzu die Vorlage Windows Store / Blank App (XAML).
Laden Sie (falls nicht schon geschehen) die Storage Client Library herunter und binden Sie sie in die Windows 8 Solution ein. Legen Sie hierzu im Projekt ein neues Verzeichnis namens Lib an. Kopieren Sie den Inhalt der ZIP-Datei der Storage Client Library in das Lib-Verzeichnis. Wählen Sie hierzu im Kontextmenü des Projekts den Punkt Add / Add Existing Item… und wählen Sie alle Dateien der Library zum Hinzufügen aus.
Fügen Sie nun eine Referenz auf die Library hinzu. Wählen Sie im Kontextmenü des Projekts den Punkt Add Reference. Browsen Sie zu dem eben angelegten Lib-Verzeichnis und fügen Sie die Datei Microsoft.WindowsAzure.Storage.winmd hinzu.Fügen Sie zur Hauptseite der Anwendung zwei Controls hinzu. Eine Schaltfläche und einen Textblock. Öffnen Sie hierzu die Datei MainPage.xaml und fügen die beiden Elemente aus der Toolbox hinzu. Benennen Sie den Textblock mit UploadStatus. Fügen Sie im XAML-Code ein entsprechendes Attribut beim Textblock-Element hinzu.
<TextBlock Name="UploadStatus" HorizontalAlignment="Left" Margin="10,53,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top"/>
Fügen Sie dem Button eine Ereignisbehandlung für das Click-Event hinzu. Ergänzen Sie das Button-Element also entsprechend.<Button Content="Button" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" RenderTransformOrigin="1.047,5.927" Click="CaptureAndUpload"/>
Implementieren Sie die Ereignisbehandlung für das Click-Event der Schaltfläche. Wechseln Sie hierzu in die Datei MainPage.xaml.cs. Fügen Sie zunächst folgende Namaspaces hinzu:
using Microsoft.WindowsAzure.Storage; using Microsoft.WindowsAzure.Storage.Auth; using Microsoft.WindowsAzure.Storage.Blob; using Windows.Media.Capture; using Windows.Storage;
Implementieren Sie die Methode CaptureAndUpload() wie folgt:
private async void CaptureAndUpload(object sender, RoutedEventArgs e) { UploadStatus.Text = ""; //Take photo or video CameraCaptureUI cameraCapture = new CameraCaptureUI(); StorageFile media = await cameraCapture.CaptureFileAsync(CameraCaptureUIMode.PhotoOrVideo); CloudStorageAccount storageAccount = CloudStorageAccount.Parse(String.Format("DefaultEndpointsProtocol={0};AccountName={1};AccountKey={2}", <STORAGE_PROTOCOL>, <ACCOUNT_NAME>, <ACCOUNT_KEY>)); // Create the blob client. CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); // Retrieve a reference to a container. CloudBlobContainer container = blobClient.GetContainerReference("capturings"); // Create the container if it doesn't already exist. await container.CreateIfNotExistsAsync(); await container.SetPermissionsAsync( new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Container }); // Retrieve reference to a blob. CloudBlockBlob blockBlob = container.GetBlockBlobReference(String.Format("capturing{0:u}{1}", DateTime.Now, media.FileType)); blockBlob.Properties.ContentType = media.ContentType; // Create or overwrite the blob with contents from the captured file. using (var fileStream = await media.OpenStreamForReadAsync()) { await blockBlob.UploadFromStreamAsync(fileStream.AsInputStream()); UploadStatus.Text = "Upload successful."; } }
Ersetzen Sie dabei die Werte für <STORAGE_PROTOCOL> (entweder “http” oder “https”), <ACCOUNT_NAME> (den oben in die Zwischenablage kopierten Account-Namen) sowie den <ACCOUNT_KEY> (der entsprechende andere Wert aus der Zwischenablage). Vergessen Sie in der Methodensignatur nicht das Schlüsselwort async.
Konfigurieren Sie die Rechte der Anwendung, so dass sie Zugriff auf die Webcam und das Mikrophon erhält. Öffnen Sie die Datei Package.appxmanifest. Wechseln Sie in den Reiter Capabilities. Aktivieren Sie dort die Kontrollkästchen für die Werte Webcam und Microphone.
Testen Sie die Anwendung, Starten Sie die Anwendung hierzu mit F5. Nach dem Start der Anwendung klicken Sie auf den Button. Sie können nun ein Bild oder ein Video aufnehmen. Sobald Sie die Aufnahme bestätigt haben, kehren Sie zum Startbildschirm der Anwendung zurück. Nach wenigen Sekunden sollte der Textblock “Upload successful.” anzeigen.
Voilà: Sie haben erfolgreich eine Aufnahme aus Windows 8 im Windows Azure Blob Storage abgelegt.
Verifizieren Sie die erfolgreiche Speicherung Ihrer Aufnahme, indem Sie sich den Inhalt des Blob Storage anzeigen lassen. Kostenlose Werkzeuge, mit denen dies möglich ist, sind: