Erste Schritte mit Azure Blob Storage und verbundenen Visual Studio-Diensten (Clouddienstprojekte)Get started with Azure Blob Storage and Visual Studio connected services (cloud services projects)

Tipp

Verwalten Sie Azure Blob Storage-Ressourcen mit Azure Storage-Explorer.Manage Azure Blob storage resources with Azure Storage Explorer. Azure Storage-Explorer ist eine kostenlose eigenständige App von Microsoft, die die Verwaltung von Azure Blob Storage-Ressourcen ermöglicht.Azure Storage Explorer is a free, standalone app from Microsoft that enables you to manage Azure Blob storage resources. Mit Microsoft Azure Storage-Explorer können Sie können Blobcontainer und Blobs visuell erstellen, lesen, aktualisieren und löschen sowie den Zugriff auf Ihre Blobcontainer und Blobs verwalten.Using Azure Storage Explorer, you can visually create, read, update, and delete blob containers and blobs, as well as manage access to your blobs containers and blobs.

ÜbersichtOverview

Dieser Artikel beschreibt die ersten Schritte mit Azure Blob Storage, nachdem Sie über das Visual Studio-Dialogfeld Verbundene Dienste hinzufügen in einem Visual Studio Clouddienstprojekt ein Azure Storage-Konto erstellt oder auf ein solches Konto verwiesen haben.This article describes how to get started with Azure Blob Storage after you created or referenced an Azure Storage account by using the Visual Studio Add Connected Services dialog in a Visual Studio cloud services project. Wir zeigen Ihnen, wie der Zugriff auf Blob-Container und deren Erstellung funktioniert, und wie Sie allgemeine Aufgaben wie das Hochladen, Auflisten und Herunterladen von Blobs durchführen.We'll show you how to access and create blob containers, and how to perform common tasks like uploading, listing, and downloading blobs. Die Beispiele sind in C# geschrieben und greifen auf die Microsoft Azure Storage-Clientbibliothek für .NET zurück.The samples are written in C# and use the Microsoft Azure Storage Client Library for .NET.

Azure Blob Storage ist ein Dienst zum Speichern großer Mengen unstrukturierter Daten, auf die von überall weltweit über HTTP oder HTTPS zugegriffen werden kann.Azure Blob Storage is a service for storing large amounts of unstructured data that can be accessed from anywhere in the world via HTTP or HTTPS. Ein einzelner BLOB kann eine beliebige Größe aufweisen.A single blob can be any size. BLOBs können Bilder, Audio- und Videodateien, Rohdaten und Dokumentdateien enthalten.Blobs can be things like images, audio and video files, raw data, and document files.

Dateien werden in Ordnern gespeichert, Speicher-BLOBs analog dazu in Containern.Just as files live in folders, storage blobs live in containers. Nachdem Sie einen Speicher erstellt haben, erstellen Sie mindestens einen Container in dem Speicher.After you have created a storage, you create one or more containers in the storage. Beispielsweise können Sie in einem Speicher namens „Notizbuch“ Container im Speicher namens „Bilder“ erstellen, um Bilder zu speichern, und einen anderen namens „Audio“ erstellen, um Audiodateien zu speichern.For example, in a storage called "Scrapbook," you can create containers in the storage called "images" to store pictures and another called "audio" to store audio files. Nachdem Sie die Container erstellt haben, können Sie einzelne BLOB-Dateien in diese hochladen.After you create the containers, you can upload individual blob files to them.

Zugreifen auf BLOB-Container in CodeAccess blob containers in code

Für den programmgesteuerten Zugriff auf Blobs in Clouddienstprojekten müssen Sie die folgenden Elemente hinzuzufügen, sofern sie nicht bereits vorhanden sind.To programmatically access blobs in cloud service projects, you need to add the following items, if they're not already present.

  1. Fügen Sie die folgenden Codenamespace-Deklarationen am Anfang aller C#-Dateien hinzu, mit denen Sie programmgesteuert auf Azure Storage zugreifen möchten.Add the following code namespace declarations to the top of any C# file in which you wish to programmatically access Azure Storage.

    using Microsoft.Framework.Configuration;
    using Microsoft.WindowsAzure.Storage;
    using Microsoft.WindowsAzure.Storage.Blob;
    using System.Threading.Tasks;
    using LogLevel = Microsoft.Framework.Logging.LogLevel;
    
  2. Rufen Sie ein CloudStorageAccount -Objekt ab, das die Informationen zu Ihrem Speicherkonto enthält.Get a CloudStorageAccount object that represents your storage account information. Verwenden Sie den folgenden Code, um Ihre Speicherverbindungszeichenfolge und Speicherkontoinformationen aus der Azure-Dienstkonfiguration abzurufen.Use the following code to get the your storage connection string and storage account information from the Azure service configuration.

    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
    CloudConfigurationManager.GetSetting("<storage account name>_AzureStorageConnectionString"));
    
  3. Rufen Sie ein CloudBlobClient -Objekt ab, um auf einen vorhandenen Container in Ihrem Speicherkonto zu verweisen.Get a CloudBlobClient object to reference an existing container in your storage account.

    // Create a blob client.
    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
    
  4. Rufen Sie ein CloudBlobContainer -Objekt ab, um auf einen bestimmten BLOB-Container zu verweisen.Get a CloudBlobContainer object to reference a specific blob container.

    // Get a reference to a container named "mycontainer."
    CloudBlobContainer container = blobClient.GetContainerReference("mycontainer");
    

Hinweis

Verwenden Sie den gesamten im vorherigen Verfahren angezeigten Code vor dem Code in den folgenden Abschnitten.Use all of the code shown in the previous procedure in front of the code shown in the following sections.

Erstellen eines Containers in CodeCreate a container in code

Hinweis

Einige APIs, die Aufrufe zum Azure-Speicher in ASP.NET ausführen, sind asynchron.Some APIs that perform calls out to Azure Storage in ASP.NET are asynchronous. Unter Asynchrone Programmierung mit Async und Await finden Sie weitere Informationen.See Asynchronous programming with Async and Await for more information. Beim Code im folgenden Beispiel wird davon ausgegangen, dass die Programmierung mit Async-Methoden erfolgt.The code in the following example assumes that you are using async programming methods.

Um einen Container im Speicherkonto zu erstellen, müssen Sie lediglich wie im folgenden Code einen Aufruf von CreateIfNotExistsAsync hinzufügen:To create a container in your storage account, all you need to do is add a call to CreateIfNotExistsAsync as in the following code:

// If "mycontainer" doesn't exist, create it.
await container.CreateIfNotExistsAsync();

Um die Dateien im Container für alle Benutzer zur Verfügung zu stellen, können Sie den Container mithilfe des folgenden Codes als öffentlich festlegen.To make the files within the container available to everyone, you can set the container to be public by using the following code.

await container.SetPermissionsAsync(new BlobContainerPermissions
{
    PublicAccess = BlobContainerPublicAccessType.Blob
});

Jede Person im Internet kann Blobs in einem öffentlichen Container anzeigen, Sie können sie jedoch nur bearbeiten oder löschen, wenn Sie über den entsprechenden Zugriffsschlüssel verfügen.Anyone on the Internet can see blobs in a public container, but you can modify or delete them only if you have the appropriate access key.

Hochladen eines Blobs in einen ContainerUpload a blob into a container

Azure-Speicher unterstützt Blockblobs und Seitenblobs.Azure Storage supports block blobs and page blobs. In den meisten Fällen wird die Verwendung von Blockblobs empfohlen.In the majority of cases, block blob is the recommended type to use.

Rufen Sie einen Containerverweis ab und verwenden Sie diesen zum Abrufen eines Blockblobverweises, um eine Datei in einen Blockblob hochzuladen.To upload a file to a block blob, get a container reference and use it to get a block blob reference. Sobald Sie über einen Blobverweis verfügen, können Sie jeden Datenstrom in diesen hochladen, indem Sie die UploadFromStream -Methode aufrufen.Once you have a blob reference, you can upload any stream of data to it by calling the UploadFromStream method. Bei diesem Vorgang wird das Blob erstellt, falls es nicht bereits vorhanden ist, oder überschrieben, falls es vorhanden ist.This operation creates the blob if it didn't previously exist, or overwrites it if it does exist. Im folgenden Beispiel wird gezeigt, wie ein Blob in einen bereits erstellten Container hochgeladen wird.The following example shows how to upload a blob into a container and assumes that the container was already created.

// Retrieve a reference to a blob named "myblob".
CloudBlockBlob blockBlob = container.GetBlockBlobReference("myblob");

// Create or overwrite the "myblob" blob with contents from a local file.
using (var fileStream = System.IO.File.OpenRead(@"path\myfile"))
{
    blockBlob.UploadFromStream(fileStream);
}

Auflisten der Blobs in einem ContainerList the blobs in a container

Um die Blobs in einem Container aufzuführen, müssen Sie zuerst einen Containerverweis abrufen.To list the blobs in a container, first get a container reference. Danach können Sie mit der ListBlobs -Methode des Containers die Blobs und/oder darin befindlichen Verzeichnisse abrufen.You can then use the container's ListBlobs method to retrieve the blobs and/or directories within it. Damit Sie auf die zahlreichen Eigenschaften und Methoden für ein zurückgegebenes IListBlobItem-Objekt zugreifen können, müssen Sie es in ein CloudBlockBlob-, CloudPageBlob- oder CloudBlobDirectory-Objekt umwandeln.To access the rich set of properties and methods for a returned IListBlobItem, you must cast it to a CloudBlockBlob, CloudPageBlob, or CloudBlobDirectory object. Wenn der Typ unbekannt ist, können Sie eine Typenüberprüfung durchführen, um zu bestimmen, in welchen Typ die Umwandlung erfolgen soll.If the type is unknown, you can use a type check to determine which to cast it to. Im folgenden Code wird gezeigt, wie der URI der einzelnen Elemente im Container photos abgerufen und ausgegeben wird:The following code demonstrates how to retrieve and output the URI of each item in the photos container:

// Loop over items within the container and output the length and URI.
foreach (IListBlobItem item in container.ListBlobs(null, false))
{
    if (item.GetType() == typeof(CloudBlockBlob))
    {
        CloudBlockBlob blob = (CloudBlockBlob)item;

        Console.WriteLine("Block blob of length {0}: {1}", blob.Properties.Length, blob.Uri);

    }
    else if (item.GetType() == typeof(CloudPageBlob))
    {
        CloudPageBlob pageBlob = (CloudPageBlob)item;

        Console.WriteLine("Page blob of length {0}: {1}", pageBlob.Properties.Length, pageBlob.Uri);

    }
    else if (item.GetType() == typeof(CloudBlobDirectory))
    {
        CloudBlobDirectory directory = (CloudBlobDirectory)item;

        Console.WriteLine("Directory: {0}", directory.Uri);
    }
}

Wie im vorherigen Codebeispiel gezeigt, wird beim Blob-Dienst ebenfalls das Konzept von Verzeichnissen in Containern angewendet.As shown in the previous code sample, the blob service has the concept of directories within containers, as well. Auf diese Weise können Sie die Blobs in einer ordnerähnlicheren Struktur organisieren.This is so that you can organize your blobs in a more folder-like structure. Beachten Sie beispielsweise den folgenden Satz von Blockblobs in einem Container mit dem Namen photos:For example, consider the following set of block blobs in a container named photos:

photo1.jpg
2010/architecture/description.txt
2010/architecture/photo3.jpg
2010/architecture/photo4.jpg
2011/architecture/photo5.jpg
2011/architecture/photo6.jpg
2011/architecture/description.txt
2011/photo7.jpg

Wenn Sie ListBlobs für den Container aufrufen (wie im obigen Beispiel), dann enthält die zurückgegebene Sammlung CloudBlobDirectory- und CloudBlockBlob-Objekte, die die Verzeichnisse und Blobs auf der obersten Ebene darstellen.When you call ListBlobs on the container (as in the previous sample), the collection returned contains CloudBlobDirectory and CloudBlockBlob objects representing the directories and blobs contained at the top level. Hier sehen Sie die Ausgabe:Here is the resulting output:

Directory: https://<accountname>.blob.core.windows.net/photos/2010/
Directory: https://<accountname>.blob.core.windows.net/photos/2011/
Block blob of length 505623: https://<accountname>.blob.core.windows.net/photos/photo1.jpg

Optional können Sie für den UseFlatBlobListing-Parameter der ListBlobs-Methode den Wert true festlegen.Optionally, you can set the UseFlatBlobListing parameter of the ListBlobs method to true. Daraufhin würde jeder Blob unabhängig vom jeweiligen Verzeichnis als CloudBlockBlobzurückgegeben werden.This results in every blob being returned as a CloudBlockBlob, regardless of directory. Hier sehen Sie den Aufruf von ListBlobs:Here is the call to ListBlobs:

// Loop over items within the container and output the length and URI.
foreach (IListBlobItem item in container.ListBlobs(null, true))
{
    ...
}

Und hier sehen Sie die Ergebnisse:and here are the results:

Block blob of length 4: https://<accountname>.blob.core.windows.net/photos/2010/architecture/description.txt
Block blob of length 314618: https://<accountname>.blob.core.windows.net/photos/2010/architecture/photo3.jpg
Block blob of length 522713: https://<accountname>.blob.core.windows.net/photos/2010/architecture/photo4.jpg
Block blob of length 4: https://<accountname>.blob.core.windows.net/photos/2011/architecture/description.txt
Block blob of length 419048: https://<accountname>.blob.core.windows.net/photos/2011/architecture/photo5.jpg
Block blob of length 506388: https://<accountname>.blob.core.windows.net/photos/2011/architecture/photo6.jpg
Block blob of length 399751: https://<accountname>.blob.core.windows.net/photos/2011/photo7.jpg
Block blob of length 505623: https://<accountname>.blob.core.windows.net/photos/photo1.jpg

Weitere Informationen finden Sie unter CloudBlobContainer.ListBlobs.For more information, see CloudBlobContainer.ListBlobs.

Herunterladen von BlobsDownload blobs

Um Blobs herunterzuladen, rufen Sie zuerst einen Blobverweis ab, und rufen Sie dann die DownloadToStream -Methode auf.To download blobs, first retrieve a blob reference and then call the DownloadToStream method. Im folgenden Beispiel wird die DownloadToStream -Methode verwendet, um den Blobinhalt auf ein Datenstromobjekt zu übertragen, das danach in einer lokalen Datei gespeichert werden kann.The following example uses the DownloadToStream method to transfer the blob contents to a stream object that you can then persist to a local file.

// Get a reference to a blob named "photo1.jpg".
CloudBlockBlob blockBlob = container.GetBlockBlobReference("photo1.jpg");

// Save blob contents to a file.
using (var fileStream = System.IO.File.OpenWrite(@"path\myfile"))
{
    blockBlob.DownloadToStream(fileStream);
}

Sie können auch die DownloadToStream -Methode verwenden, um den Inhalt eines Blobs als Textzeichenfolge herunterzuladen.You can also use the DownloadToStream method to download the contents of a blob as a text string.

// Get a reference to a blob named "myblob.txt"
CloudBlockBlob blockBlob2 = container.GetBlockBlobReference("myblob.txt");

string text;
using (var memoryStream = new MemoryStream())
{
    blockBlob2.DownloadToStream(memoryStream);
    text = System.Text.Encoding.UTF8.GetString(memoryStream.ToArray());
}

Löschen von BlobsDelete blobs

Um ein BLOB zu löschen, rufen Sie zuerst einen BLOB-Verweis ab, und rufen Sie dann die Delete -Methode auf.To delete a blob, first get a blob reference and then call the Delete method.

// Get a reference to a blob named "myblob.txt".
CloudBlockBlob blockBlob = container.GetBlockBlobReference("myblob.txt");

// Delete the blob.
blockBlob.Delete();

Asynchrones Auflisten von Blobs auf SeitenList blobs in pages asynchronously

Wenn Sie eine große Anzahl von Blobs auflisten oder die Anzahl der Ergebnisse steuern möchten, die in einem Auflistungsvorgang zurückgegeben werden, können Sie Blobs auf Ergebnisseiten auflisten.If you are listing a large number of blobs, or you want to control the number of results you return in one listing operation, you can list blobs in pages of results. In diesem Beispiel wird gezeigt, wie Sie Ergebnisse auf Seiten asynchron zurückgeben, sodass die Ausführung nicht durch einen großen Ergebnissatz blockiert wird.This example shows how to return results in pages asynchronously, so that execution is not blocked while waiting to return a large set of results.

In diesem Beispiel wird eine einfache Blobauflistung gezeigt, aber Sie können auch eine hierarchische Auflistung verwenden, indem Sie den useFlatBlobListing-Parameter der ListBlobsSegmentedAsync-Methode auf FALSE festlegen.This example shows a flat blob listing, but you can also perform a hierarchical listing, by setting the useFlatBlobListing parameter of the ListBlobsSegmentedAsync method to false.

Da die Beispielmethode eine asynchrone Methode aufruft, muss sie mit dem Schlüsselwort async eingeleitet werden und ein Task-Objekt zurückgeben.Because the sample method calls an asynchronous method, it must be prefaced with the async keyword, and it must return a Task object. Das Schlüsselwort "await" für die Methode ListBlobsSegmentedAsync hält die Ausführung der Beispielmethode an, bis die Auflistung abgeschlossen ist.The await keyword specified for the ListBlobsSegmentedAsync method suspends execution of the sample method until the listing task completes.

async public static Task ListBlobsSegmentedInFlatListing(CloudBlobContainer container)
{
    // List blobs to the console window, with paging.
    Console.WriteLine("List blobs in pages:");

    int i = 0;
    BlobContinuationToken continuationToken = null;
    BlobResultSegment resultSegment = null;

    // Call ListBlobsSegmentedAsync and enumerate the result segment returned, while the continuation token is non-null.
    // When the continuation token is null, the last page has been returned and execution can exit the loop.
    do
    {
        // This overload allows control of the page size. You can return all remaining results by passing null for the maxResults parameter,
        // or by calling a different overload.
        resultSegment = await container.ListBlobsSegmentedAsync("", true, BlobListingDetails.All, 10, continuationToken, null, null);
        if (resultSegment.Results.Count<IListBlobItem>() > 0) { Console.WriteLine("Page {0}:", ++i); }
        foreach (var blobItem in resultSegment.Results)
        {
            Console.WriteLine("\t{0}", blobItem.StorageUri.PrimaryUri);
        }
        Console.WriteLine();

        //Get the continuation token.
        continuationToken = resultSegment.ContinuationToken;
    }
    while (continuationToken != null);
}

Nächste SchritteNext steps

Nachdem Sie sich nun mit den Grundlagen von Azure Blob Storage vertraut gemacht haben, folgen Sie diesen Links, um zu erfahren, wie komplexere Speicheraufgaben ausgeführt werden.Now that you've learned the basics of Azure Blob storage, follow these links to learn about more complex storage tasks.