Introduzione all'Archiviazione BLOB di Azure e ai Servizi connessi di Visual Studio (ASP.NET)

Suggerimento

Gestire le risorse dell'archivio BLOB di Azure con Microsoft Azure Storage Explorer

Esplora archivi di Microsoft Azure è un'app autonoma gratuita di Microsoft che consente di gestire risorse di Archiviazione BLOB di Azure. Esplora archivi di Microsoft Azure consente di creare, leggere, aggiornare ed eliminare contenitori BLOB e BLOB, nonché di gestire l'accesso ai contenitori BLOB e ai BLOB.

Panoramica

L'Archiviazione BLOB di Azure è un servizio che archivia i dati non strutturati nel cloud come oggetti/BLOB. Archivio BLOB può archiviare qualsiasi tipo di dati di testo o binari, ad esempio un documento, un file multimediale o un programma di installazione di un'applicazione. L'archivio BLOB è anche denominato archivio di oggetti.

Questa esercitazione illustra come scrivere codice ASP.NET per alcuni scenari comuni usando l'Archiviazione BLOB di Azure. Gli scenari includono la creazione di un contenitore BLOB e il caricamento, la creazione di elenchi, il download e l'eliminazione di BLOB.

Prerequisiti

Informazioni sull'archiviazione BLOB

Archivio BLOB di Azure è un servizio per l'archiviazione di grandi quantità di dati oggetto non strutturati, ad esempio dati di testo o binari, a cui è possibile accedere da qualsiasi parte del mondo tramite HTTP o HTTPS. L'archiviazione BLOB può essere usata per esporre dati pubblicamente a livello mondiale o archiviare privatamente i dati delle applicazioni.

Quelli di seguito sono gli impieghi più comuni dell'archiviazione BLOB:

  • Invio di immagini o documenti direttamente in un browser
  • Archiviazione di file per l'accesso distribuito
  • Flussi audio e video
  • Archiviazione di dati per backup e ripristino, ripristino di emergenza e archiviazione
  • Archiviazione di dati a scopo di analisi da parte di un servizio locale o ospitato in Azure

Concetti del servizio BLOB

Il servizio BLOB è composto dai componenti seguenti:

Architettura BLOB

  • Account di archiviazione: l'accesso ad Archiviazione di Azure viene eseguito esclusivamente tramite un account di archiviazione. Questo può essere un account di archiviazione di uso generico o un account di archiviazione BLOB, specializzato per l'archiviazione di oggetti/BLOB. Per altre informazioni, vedere Informazioni sugli account di archiviazione di Azure.
  • Contenitore: un contenitore è un raggruppamento di un set di BLOB. Tutti i BLOB devono trovarsi in un contenitore. In un account può esistere un numero illimitato di contenitori. In un contenitore può essere archiviato un numero illimitato di BLOB. Il nome del contenitore deve essere in lettere minuscole.
  • BLOB: file di qualsiasi tipo e dimensione. Archiviazione di Azure offre tre tipi di BLOB: i BLOB in blocchi, i BLOB di pagine e i BLOB di accodamento.

    BLOB in blocchi sono ideali per l'archiviazione di file di testo o file binari, ad esempio i documenti e i file multimediali. BLOB di accodamento sono simili ai BLOB in blocchi in quanto sono costituiti da blocchi, ma sono ottimizzati per le operazioni di accodamento, in modo che siano utili per gli scenari di registrazione. Un singolo BLOB in blocchi può contenere fino a 50.000 blocchi da al massimo 100 MB ognuno, per una dimensione totale leggermente superiore a 4,75 TB (100 MB X 50.000). Un singolo BLOB di accodamento può contenere fino a 50.000 blocchi da al massimo 4 MB ognuno, per una dimensione totale leggermente superiore a 195 GB (4 MB X 50.000).

    BLOB di pagine possono avere un dimensione di al massimo 1 TB e sono più efficienti per operazioni di lettura/scrittura frequenti. Le Macchine virtuali di Azure utilizzano i BLOB di pagine come dischi del sistema operativo e dati.

    Per informazioni sulla denominazione di contenitori e BLOB, vedere l'articolo relativo alla denominazione e riferimento a contenitori, BLOB e metadati.

Creare un account di archiviazione di Azure

Il modo più semplice per creare il primo account di archiviazione di Azure consiste nell'usare il portale di Azure. Per altre informazioni, vedere Creare un account di archiviazione.

È anche possibile creare un account di archiviazione di Azure usando Azure PowerShell, l'interfaccia della riga di comando di Azure o la libreria client del provider di risorse di archiviazione per .NET.

Configurare l'ambiente di sviluppo

Questa sezione illustra la configurazione dell'ambiente di sviluppo, incluse la creazione di un'app ASP.NET MVC, l'aggiunta di una connessione di Servizi connessi, l'aggiunta di un controller e la specifica delle direttive degli spazi dei nomi necessarie.

Creare un progetto di app ASP.NET MVC

  1. Aprire Visual Studio.

  2. Scegliere File->Nuovo->Progetto dal menu principale.

  3. Nella finestra di dialogo Nuovo progetto specificare le opzioni evidenziate nella figura seguente:

    Creazione di un progetto ASP.NET

  4. Selezionare OK.

  5. Nella finestra di dialogo Nuovo progetto ASP.NET specificare le opzioni evidenziate nella figura seguente:

    Specificare MVC

  6. Selezionare OK.

Usare Servizi connessi per connettersi a un account di archiviazione di Azure

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto e scegliere Aggiungi > Servizi connessi dal menu di scelta rapida.

  2. Nella finestra di dialogo Aggiungi servizio connesso scegliere Archiviazione di Azure, quindi fare clic su Configura.

    Finestra di dialogo Servizi connessi

  3. Nella finestra di dialogo Archiviazione di Azure selezionare l'account di archiviazione di Azure desiderato e selezionare Aggiungi.

Creare un controller MVC

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse su Controller e selezionare Aggiungi > Controller dal menu di scelta rapida.

    Aggiungere un controller a un'app MVC ASP.NET

  2. Nella finestra di dialogo Aggiungi scaffolding fare clic su Controller MVC 5 - Vuoto e selezionare Aggiungi.

    Specificare il tipo di controller MVC

  3. Nella finestra di dialogo Aggiungi controller assegnare un nome al controller BlobsControllere selezionare Aggiungi.

    Assegnare un nome al controller MVC

  4. Aggiungere le direttive using seguenti al file BlobsController.cs:

    using Microsoft.Azure;
    using Microsoft.WindowsAzure.Storage;
    using Microsoft.WindowsAzure.Storage.Auth;
    using Microsoft.WindowsAzure.Storage.Blob;
    

Creare un contenitore BLOB

Un contenitore BLOB è una gerarchia nidificata di BLOB e cartelle. I passaggi seguenti illustrano come creare un contenitore BLOB:

Nota

Il codice in questa sezione presuppone che siano stati completati i passaggi descritti nella sezione Configurare l'ambiente di sviluppo.

  1. Aprire il file BlobsController.cs .

  2. Aggiungere un metodo denominato CreateBlobContainer che restituisce un ActionResult.

    public ActionResult CreateBlobContainer()
    {
        // The code in this section goes here.
    
        return View();
    }
    
  3. Nel metodo CreateBlobContainer recuperare un oggetto CloudStorageAccount che rappresenta le informazioni sull'account di archiviazione. Utilizzare il codice seguente per ottenere la stringa di connessione di archiviazione e le informazioni sull'account di archiviazione dalla configurazione del servizio di Azure. Cambiare <storage-account-name> con il nome dell'account di archiviazione di Azure a cui si sta eseguendo l'accesso.

    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
       CloudConfigurationManager.GetSetting("<storage-account-name>_AzureStorageConnectionString"));
    
  4. Recuperare un oggetto CloudBlobClient che rappresenta un client del servizio BLOB.

    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
    
  5. Recuperare un oggetto CloudBlobContainer che rappresenta un riferimento al nome del contenitore BLOB desiderato. Il metodo CloudBlobClient.GetContainerReference non esegue una richiesta all'archiviazione BLOB. Il riferimento viene restituito indipendentemente dall'esistenza del contenitore BLOB.

    CloudBlobContainer container = blobClient.GetContainerReference("test-blob-container");
    
  6. Chiamare il metodo CloudBlobContainer.CreateIfNotExists per creare il contenitore, se non esiste già. Il metodo CloudBlobContainer.CreateIfNotExists restituisce true se il contenitore non esiste e il contenitore viene creato. In caso contrario, viene restituito false.

    ViewBag.Success = container.CreateIfNotExists();
    
  7. Aggiornare ViewBag con il nome del contenitore BLOB.

    ViewBag.BlobContainerName = container.Name;
    
  8. In Esplora soluzioni espandere la cartella Views, fare clic con il pulsante destro del mouse su BLOB e dal menu di scelta rapida selezionare Aggiungi->Visualizzazione.

  9. Nella finestra di dialogo Aggiungi visualizzazione immettere CreateBlobContainer per il nome della visualizzazione e selezionare Aggiungi.

  10. Aprire CreateBlobContainer.cshtml e modificarlo in modo che l'aspetto sia simile al frammento di codice seguente:

    @{
        ViewBag.Title = "Create Blob Container";
    }
    
    <h2>Create Blob Container results</h2>
    
    Creation of @ViewBag.BlobContainerName @(ViewBag.Success == true ? "succeeded" : "failed")
    
  11. In Esplora soluzioni espandere la cartella Views->Shared e aprire _Layout.cshtml.

  12. Dopo l'ultimo Html.ActionLink, aggiungere il seguente Html.ActionLink:

    <li>@Html.ActionLink("Create blob container", "CreateBlobContainer", "Blobs")</li>
    
  13. Eseguire l'applicazione e selezionare Crea contenitore BLOB per visualizzare risultati simili allo screenshot seguente:

    Creare un contenitore BLOB

    Come accennato in precedenza, il metodo CloudBlobContainer.CreateIfNotExists restituisce true solo quando il contenitore non esiste e viene creato. Se quindi si esegue l'app quando il contenitore esiste, il metodo restituisce false. Per eseguire l'app più volte, è necessario eliminare il contenitore prima di eseguire di nuovo l'app. È possibile eliminare il contenitore usando il metodo CloudBlobContainer.Delete. È possibile anche eliminare il contenitore usando il portale Azure o Esplora archivi di Microsoft Azure.

Caricare un BLOB in un contenitore BLOB

Dopo avere creato un contenitore BLOB, è possibile caricare file in questo contenitore. Questa sezione illustra come caricare un file locale in un contenitore BLOB. Nei passaggi si presuppone che sia stato creato un contenitore BLOB denominato test-blob-container.

Nota

Il codice in questa sezione presuppone che siano stati completati i passaggi descritti nella sezione Configurare l'ambiente di sviluppo.

  1. Aprire il file BlobsController.cs .

  2. Aggiungere un metodo denominato UploadBlob che restituisce un EmptyResult.

    public EmptyResult UploadBlob()
    {
        // The code in this section goes here.
    
        return new EmptyResult();
    }
    
  3. Nel metodo UploadBlob recuperare un oggetto CloudStorageAccount che rappresenta le informazioni sull'account di archiviazione. Usare il codice seguente per ottenere la stringa di connessione di archiviazione e le informazioni sull'account di archiviazione dalla configurazione del servizio di Azure: sostituire <storage-account-name> con il nome dell'account di archiviazione Azure a cui si sta accedendo.

    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
       CloudConfigurationManager.GetSetting("<storage-account-name>_AzureStorageConnectionString"));
    
  4. Recuperare un oggetto CloudBlobClient che rappresenta un client del servizio BLOB.

    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
    
  5. Recuperare un oggetto CloudBlobContainer che rappresenta un riferimento al nome del contenitore BLOB.

    CloudBlobContainer container = blobClient.GetContainerReference("test-blob-container");
    
  6. Come illustrato in precedenza, l'Archiviazione di Azure supporta tipi di BLOB diversi. Per recuperare un riferimento a un BLOB di pagine, chiamare il metodo CloudBlobContainer.GetPageBlobReference. Per recuperare un riferimento a un BLOB in blocchi, chiamare il metodo CloudBlobContainer.GetBlockBlobReference. Nella maggior parte dei casi è consigliabile usare il tipo di BLOB in blocchi. Cambiare * nel nome da assegnare al BLOB una volta caricato.

    CloudBlockBlob blob = container.GetBlockBlobReference(<blob-name>);
    
  7. Dopo avere ottenuto un riferimento al BLOB, è possibile caricarvi qualsiasi flusso di dati chiamando il metodo UploadFromStream dell'oggetto di riferimento al BLOB. Il metodo UploadFromStream crea il BLOB, se non esiste, o lo sovrascrive, se esiste. Cambiare <file-to-upload> in un percorso completo del file da caricare.

    using (var fileStream = System.IO.File.OpenRead(<file-to-upload>))
    {
        blob.UploadFromStream(fileStream);
    }
    
  8. In Esplora soluzioni espandere la cartella Views, fare clic con il pulsante destro del mouse su BLOB e dal menu di scelta rapida selezionare Aggiungi->Visualizzazione.

  9. In Esplora soluzioni espandere la cartella Views->Shared e aprire _Layout.cshtml.

  10. Dopo l'ultimo Html.ActionLink, aggiungere il seguente Html.ActionLink:

    <li>@Html.ActionLink("Upload blob", "UploadBlob", "Blobs")</li>
    
  11. Eseguire l'applicazione e selezionare Carica BLOB.

La sezione Elencare i BLOB in un contenitore BLOB illustra come elencare i BLOB in un contenitore BLOB.

Elencare i BLOB in un contenitore BLOB

Questa sezione illustra come elencare i BLOB in un contenitore BLOB. Il codice di esempio fa riferimento al test-blob-container creato nella sezione Creare un contenitore BLOB.

Nota

Il codice in questa sezione presuppone che siano stati completati i passaggi descritti nella sezione Configurare l'ambiente di sviluppo.

  1. Aprire il file BlobsController.cs .

  2. Aggiungere un metodo denominato ListBlobs che restituisce un ActionResult.

    public ActionResult ListBlobs()
    {
        // The code in this section goes here.
    
        return View();
    }
    
  3. Nel metodo ListBlobs recuperare un oggetto CloudStorageAccount che rappresenta le informazioni sull'account di archiviazione. Usare il codice seguente per ottenere la stringa di connessione di archiviazione e le informazioni sull'account di archiviazione dalla configurazione del servizio di Azure: sostituire <storage-account-name> con il nome dell'account di archiviazione Azure a cui si sta accedendo.

    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
       CloudConfigurationManager.GetSetting("<storage-account-name>_AzureStorageConnectionString"));
    
  4. Recuperare un oggetto CloudBlobClient che rappresenta un client del servizio BLOB.

    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
    
  5. Recuperare un oggetto CloudBlobContainer che rappresenta un riferimento al nome del contenitore BLOB.

    CloudBlobContainer container = blobClient.GetContainerReference("test-blob-container");
    
  6. Per elencare i BLOB in un contenitore BLOB, usare il metodo CloudBlobContainer.ListBlobs. Il metodo CloudBlobContainer.ListBlobs restituisce un oggetto IListBlobItem che viene trasmesso a un oggetto CloudBlockBlob, CloudPageBlob o CloudBlobDirectory. Il seguente frammento di codice enumera tutti i BLOB in un contenitore BLOB. Ogni BLOB trasmesso all'oggetto appropriato in base al tipo e il suo nome (o URI nel caso di una CloudBlobDirectory) viene aggiunto a un elenco.

    List<string> blobs = new List<string>();
    
    foreach (IListBlobItem item in container.ListBlobs(null, false))
    {
        if (item.GetType() == typeof(CloudBlockBlob))
        {
            CloudBlockBlob blob = (CloudBlockBlob)item;
            blobs.Add(blob.Name);
        }
        else if (item.GetType() == typeof(CloudPageBlob))
        {
            CloudPageBlob blob = (CloudPageBlob)item;
            blobs.Add(blob.Name);
        }
        else if (item.GetType() == typeof(CloudBlobDirectory))
        {
            CloudBlobDirectory dir = (CloudBlobDirectory)item;
            blobs.Add(dir.Uri.ToString());
        }
    }
    
    return View(blobs);
    

    I contenitori BLOB possono contenere directory, oltre ai BLOB. Se ad esempio si esamina un contenitore BLOB denominato test-blob-container con la gerarchia seguente:

     foo.png
     dir1/bar.png
     dir2/baz.png
    

    Con l'esempio di codice precedente, l'elenco di stringhe blobs contiene valori simili ai seguenti:

     foo.png
     <storage-account-url>/test-blob-container/dir1
     <storage-account-url>/test-blob-container/dir2
    

    Come può notare, l'elenco include solo le entità di livello superiore, non quelle annidate (bar.png e baz.png). Per elencare tutte le entità all'interno di un contenitore BLOB, è necessario chiamare il metodo CloudBlobContainer.ListBlobs e passare true per il parametro useFlatBlobListing.

    ...
    foreach (IListBlobItem item in container.ListBlobs(useFlatBlobListing:true))
    ...
    

    L'impostazione del parametro useFlatBlobListing su true restituisce un elenco semplice di tutte le entità nel contenitore BLOB e genera i risultati seguenti:

     foo.png
     dir1/bar.png
     dir2/baz.png
    
  7. In Esplora soluzioni espandere la cartella Views, fare clic con il pulsante destro del mouse su BLOB e dal menu di scelta rapida selezionare Aggiungi->Visualizzazione.

  8. Nella finestra di dialogo Aggiungi visualizzazione immettere ListBlobs per il nome della visualizzazione e selezionare Aggiungi.

  9. Aprire ListBlobs.cshtml e modificarlo in modo che l'aspetto sia simile al frammento di codice seguente:

    @model List<string>
    @{
        ViewBag.Title = "List blobs";
    }
    
    <h2>List blobs</h2>
    
    <ul>
        @foreach (var item in Model)
        {
        <li>@item</li>
        }
    </ul>
    
  10. In Esplora soluzioni espandere la cartella Views->Shared e aprire _Layout.cshtml.

  11. Dopo l'ultimo Html.ActionLink, aggiungere il seguente Html.ActionLink:

    <li>@Html.ActionLink("List blobs", "ListBlobs", "Blobs")</li>
    
  12. Eseguire l'applicazione e selezionare List blobs (Elenca BLOB) per visualizzare risultati simili allo screenshot seguente:

    Elenco di BLOB

Scaricare BLOB

Questa sezione illustra come scaricare un BLOB e salvarlo in modo permanente nell'archiviazione locale o leggere il contenuto in una stringa. Il codice di esempio fa riferimento al test-blob-container creato nella sezione Creare un contenitore BLOB.

  1. Aprire il file BlobsController.cs .

  2. Aggiungere un metodo denominato DownloadBlob che restituisce un ActionResult.

    public EmptyResult DownloadBlob()
    {
        // The code in this section goes here.
    
        return new EmptyResult();
    }
    
  3. Nel metodo DownloadBlob recuperare un oggetto CloudStorageAccount che rappresenta le informazioni sull'account di archiviazione. Usare il codice seguente per ottenere la stringa di connessione di archiviazione e le informazioni sull'account di archiviazione dalla configurazione del servizio di Azure: sostituire <storage-account-name> con il nome dell'account di archiviazione Azure a cui si sta accedendo.

    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
       CloudConfigurationManager.GetSetting("<storage-account-name>_AzureStorageConnectionString"));
    
  4. Recuperare un oggetto CloudBlobClient che rappresenta un client del servizio BLOB.

    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
    
  5. Recuperare un oggetto CloudBlobContainer che rappresenta un riferimento al nome del contenitore BLOB.

    CloudBlobContainer container = blobClient.GetContainerReference("test-blob-container");
    
  6. Recuperare un oggetto di riferimento al BLOB chiamando il metodo CloudBlobContainer.GetBlockBlobReference o CloudBlobContainer.GetPageBlobReference. Cambiare <blob-name> nel nome del BLOB che si sta scaricando.

    CloudBlockBlob blob = container.GetBlockBlobReference(<blob-name>);
    
  7. Per scaricare un BLOB, usare il metodo CloudBlockBlob.DownloadToStream o CloudPageBlob.DownloadToStream, a seconda del tipo di BLOB. Il frammento di codice seguente usa il metodo CloudBlockBlob.DownloadToStream per trasferire il contenuto di un BLOB a un oggetto flusso che viene salvato in modo permanente in un file locale: modificare <local-file-name> nel nome del file completo che rappresenta il percorso in cui scaricare il BLOB.

    using (var fileStream = System.IO.File.OpenWrite(<local-file-name>))
    {
        blob.DownloadToStream(fileStream);
    }
    
  8. In Esplora soluzioni espandere la cartella Views->Shared e aprire _Layout.cshtml.

  9. Dopo l'ultimo Html.ActionLink, aggiungere il seguente Html.ActionLink:

    <li>@Html.ActionLink("Download blob", "DownloadBlob", "Blobs")</li>
    
  10. Eseguire l'applicazione e selezionare Scarica BLOB per scaricare il BLOB. Il BLOB specificato nella chiamata al metodo CloudBlobContainer.GetBlockBlobReference viene scaricato nel percorso specificato nella chiamata al metodo File.OpenWrite.

Eliminare BLOB

I passaggi seguenti illustrano come eliminare un BLOB:

Nota

Il codice in questa sezione presuppone che siano stati completati i passaggi descritti nella sezione Configurare l'ambiente di sviluppo.

  1. Aprire il file BlobsController.cs .

  2. Aggiungere un metodo denominato DeleteBlob che restituisce un ActionResult.

    public EmptyResult DeleteBlob()
    {
        // The code in this section goes here.
    
        return new EmptyResult();
    }
    
  3. Ottenere un oggetto CloudStorageAccount che rappresenta le informazioni sull'account di archiviazione. Usare il codice seguente per ottenere la stringa di connessione di archiviazione e le informazioni sull'account di archiviazione dalla configurazione del servizio di Azure: sostituire <storage-account-name> con il nome dell'account di archiviazione Azure a cui si sta accedendo.

    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
       CloudConfigurationManager.GetSetting("<storage-account-name>_AzureStorageConnectionString"));
    
  4. Recuperare un oggetto CloudBlobClient che rappresenta un client del servizio BLOB.

    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
    
  5. Recuperare un oggetto CloudBlobContainer che rappresenta un riferimento al nome del contenitore BLOB.

    CloudBlobContainer container = blobClient.GetContainerReference("test-blob-container");
    
  6. Recuperare un oggetto di riferimento al BLOB chiamando il metodo CloudBlobContainer.GetBlockBlobReference o CloudBlobContainer.GetPageBlobReference. Cambiare <blob-name> nel nome del BLOB che si sta eliminando.

    CloudBlockBlob blob = container.GetBlockBlobReference(<blob-name>);
        ```
    
    
  7. To delete a blob, use the Delete method.

    blob.Delete();
    
  8. In Esplora soluzioni espandere la cartella Views->Shared e aprire _Layout.cshtml.

  9. Dopo l'ultimo Html.ActionLink, aggiungere il seguente Html.ActionLink:

    <li>@Html.ActionLink("Delete blob", "DeleteBlob", "Blobs")</li>
    
  10. Eseguire l'applicazione e selezionare Elimina BLOB per eliminare il BLOB specificato nella chiamata al metodo CloudBlobContainer.GetBlockBlobReference.

Passaggi successivi

Per ulteriori opzioni di archiviazione dei dati in Azure, consultare altre guide alle funzionalità.