Avvio rapido: Gestire i BLOB con Java v8 SDK

In questo argomento di avvio rapido viene illustrato come gestire i BLOB con Java. I BLOB sono oggetti che possono contenere grandi quantità di dati di testo o binari, tra cui immagini, documenti, flussi multimediali e dati di archiviazione. È possibile caricare, scaricare ed elencare BLOB. È anche possibile creare contenitori, impostare le relative autorizzazioni ed eliminarli.

Nota

In questo argomento di avvio rapido si usa una versione legacy della libreria client di Archiviazione BLOB di Azure. Per un'introduzione alla versione più recente, vedere Avvio rapido: Gestire i BLOB con Java SDK v12.

Prerequisiti

Scaricare l'applicazione di esempio

L'applicazione di esempio è un'applicazione console di base.

Usare git per scaricare una copia dell'applicazione nell'ambiente di sviluppo.

git clone https://github.com/Azure-Samples/storage-blobs-java-quickstart.git

Questo comando consente di duplicare il repository nella cartella locale git. Per aprire il progetto, avviare Eclipse e chiudere la schermata iniziale. Selezionare File quindi Open Projects from File System (Apri progetti da file system). Assicurarsi che l'opzione Detect and configure project natures (Rileva e configura nature progetto) sia selezionata. Selezionare Directory quindi spostarsi dove è stato archiviato il repository clonato. All'interno del repository clonato selezionare la cartella blobAzureApp. Verificare che il progetto blobAzureApp sia visualizzato come progetto di Eclipse, quindi selezionare Finish (Fine).

Una volta completata l'importazione del progetto, aprire AzureApp.java (in blobQuickstart.blobAzureApp all'interno di src/main/java) e sostituire accountname e accountkey all'interno della stringa storageConnectionString. Quindi eseguire l'applicazione. Le istruzioni specifiche per il completamento di queste attività sono descritte nelle sezioni seguenti.

Copiare le credenziali dal portale di Azure

L'applicazione di esempio deve autenticare l'accesso all'account di archiviazione. Per eseguire l'autenticazione, aggiungere all'applicazione le credenziali dell'account di archiviazione sotto forma di stringa di connessione. Visualizzare le credenziali dell'account di archiviazione seguendo questa procedura:

  1. Accedere al portale di Azure.

  2. Individuare l'account di archiviazione.

  3. Nella sezione Impostazioni della panoramica dell'account di archiviazione selezionare Chiavi di accesso. A questo punto è possibile visualizzare le chiavi di accesso dell'account e la stringa di connessione completa per ogni chiave.

  4. Trovare il valore Stringa di connessione in key1 e selezionare il pulsante Copia per copiare la stringa di connessione. Il valore della stringa di connessione verrà aggiunto a una variabile di ambiente nel passaggio successivo.

    Screenshot showing how to copy a connection string from the Azure portal

Configurare la stringa di connessione di archiviazione

Nell'applicazione è necessario inserire la stringa di connessione per l'account di archiviazione. Aprire il file AzureApp.Java. Trovare la variabile storageConnectionString e incollare il valore della stringa di connessione copiato nella sezione precedente. La variabile storageConnectionString sarà simile all'esempio di codice seguente:

public static final String storageConnectionString =
"DefaultEndpointsProtocol=https;" +
"AccountName=<account-name>;" +
"AccountKey=<account-key>";

Eseguire l'esempio

Questa applicazione di esempio crea un file di test nella directory predefinita (C:\Usersuser<>\AppData\Local\Temp, per Windows utenti), lo carica nell'archiviazione BLOB, elenca i BLOB nel contenitore, quindi scarica il file con un nuovo nome in modo da poter confrontare i file precedenti e nuovi.

Eseguire l'esempio usando Maven nella riga di comando. Aprire una shell e passare a blobAzureApp nella directory clonata. Immettere quindi mvn compile exec:java.

L'esempio seguente mostra l'output che si otterrebbe eseguendo l'applicazione in Windows.

Azure Blob storage quick start sample
Creating container: quickstartcontainer
Creating a sample file at: C:\Users\<user>\AppData\Local\Temp\sampleFile514658495642546986.txt
Uploading the sample file
URI of blob is: https://myexamplesacct.blob.core.windows.net/quickstartcontainer/sampleFile514658495642546986.txt
The program has completed successfully.
Press the 'Enter' key while in the console to delete the sample files, example container, and exit the application.

Deleting the container
Deleting the source, and downloaded files

Prima di continuare, controllare la directory predefinita (C:\Usersuser<>\AppData\Local\Temp, per Windows utenti) per il file di esempio. Copiare l'URL per il BLOB nella finestra della console e incollarlo in un browser per visualizzare il contenuto del file nell'archiviazione BLOB. Se si confronta il file di esempio nella directory con il contenuto archiviato nell'archivio Blob, si noterà che sono uguali.

Nota

È anche possibile usare uno strumento come Azure Storage Explorer per visualizzare i file nell'archiviazione BLOB. Azure Storage Explorer è uno strumento multipiattaforma gratuito che consente di accedere alle informazioni dell'account di archiviazione.

Dopo aver verificato i file, premere INVIO per completare la demo ed eliminare i file di test. Ora che si conosce il risultato dell'esempio, aprire il file AzureApp.java per esaminare il codice.

Informazioni sul codice di esempio

Viene quindi descritto in dettaglio il codice di esempio, per consentire di comprenderne il funzionamento.

Ottenere i riferimenti agli oggetti di archiviazione

La prima cosa da fare è creare i riferimenti agli oggetti usati per accedere e gestire l'archiviazione BLOB. Questi oggetti si compilano a vicenda: ognuno di essi viene usato da quello successivo nell'elenco.

  • Creare un'istanza dell'oggetto CloudStorageAccount che punti all'account di archiviazione.

    L'oggetto CloudStorageAccount è una rappresentazione dell'account di archiviazione e consente di impostare le proprietà di tale account e di accedervi a livello di codice. Con l'oggetto CloudStorageAccount è possibile creare un'istanza di CloudBlobClient, necessaria per accedere al servizio BLOB.

  • Creare un'istanza dell'oggetto CloudBlobClient che punti al servizio BLOB nell'account di archiviazione.

    CloudBlobClient costituisce un punto di accesso al servizio BLOB che consente di impostare le proprietà di archiviazione BLOB e di accedervi a livello di codice. Con l'oggetto CloudBlobClient è possibile creare un'istanza dell'oggetto CloudBlobContainer, necessaria per creare contenitori.

  • Creare un'istanza dell'oggetto CloudBlobContainer che rappresenti il contenitore a cui si accede. Usare i contenitori per organizzare i BLOB, così come si usano le cartelle nel computer per organizzare i file.

    Dopo aver creato CloudBlobContainer, è possibile creare un'istanza dell'oggetto CloudBlockBlob che punti al BLOB specifico a cui si è interessati ed esegua operazioni di caricamento, download, copia e così via.

Importante

I nomi dei contenitori devono essere in minuscolo. Per altre informazioni sui contenitori, vedere Denominazione e riferimento a contenitori, BLOB e metadati.

Creare un contenitore

In questa sezione si creano istanze degli oggetti, si crea un nuovo contenitore e quindi si impostano le autorizzazioni nel contenitore in modo che i BLOB siano pubblici e accessibili solo con un URL. Il contenitore è denominato quickstartcontainer.

Questo esempio usa CreateIfNotExists perché si desidera creare un nuovo contenitore ogni volta che si esegue l'esempio. In un ambiente di produzione in cui si usa lo stesso contenitore per tutta l'applicazione, è consigliabile chiamare CreateIfNotExists solo una volta. In alternativa, è possibile creare il contenitore in anticipo in modo che non sia necessario crearlo nel codice.

// Parse the connection string and create a blob client to interact with Blob storage
storageAccount = CloudStorageAccount.parse(storageConnectionString);
blobClient = storageAccount.createCloudBlobClient();
container = blobClient.getContainerReference("quickstartcontainer");

// Create the container if it does not exist with public access.
System.out.println("Creating container: " + container.getName());
container.createIfNotExists(BlobContainerPublicAccessType.CONTAINER, new BlobRequestOptions(), new OperationContext());

Caricare i BLOB nel contenitore

Per caricare un file in un BLOB in blocchi, ottenere un riferimento al BLOB nel contenitore di destinazione. Dopo aver creato il riferimento al BLOB, è possibile caricarvi i dati con CloudBlockBlob.Upload. Questa operazione consente di creare il BLOB se non esiste o di sovrascriverlo se esiste già.

Il codice di esempio crea un file locale da usare per il caricamento e il download, archiviando il file da caricare come origine e il nome del BLOB in BLOB. Nell'esempio seguente il file viene caricato nel contenitore denominato quickstartcontainer.

//Creating a sample file
sourceFile = File.createTempFile("sampleFile", ".txt");
System.out.println("Creating a sample file at: " + sourceFile.toString());
Writer output = new BufferedWriter(new FileWriter(sourceFile));
output.write("Hello Azure!");
output.close();

//Getting a blob reference
CloudBlockBlob blob = container.getBlockBlobReference(sourceFile.getName());

//Creating blob and uploading file to it
System.out.println("Uploading the sample file ");
blob.uploadFromFile(sourceFile.getAbsolutePath());

Sono disponibili diversi metodi upload, tra cui upload, uploadBlock, uploadFullBlob, uploadStandardBlobTier e uploadText che è possibile usare con l'archiviazione BLOB. Nel caso di una stringa, ad esempio, è possibile usare il metodo UploadText anziché il metodo Upload.

I BLOB in blocchi possono essere qualsiasi tipo di file di testo o binario. I BLOB di pagine vengono usati principalmente per i file VHD su cui si basano le macchine virtuali IaaS. Usare i BLOB di accodamento per la registrazione, ad esempio quando si vuole scrivere in un file e poi continuare ad aggiungere altre informazioni. La maggior parte degli oggetti presenti nell'archiviazione BLOB è costituita da BLOB in blocchi.

Elencare i BLOB in un contenitore

È possibile ottenere l'elenco dei file nel contenitore usando CloudBlobContainer.ListBlobs. Il codice seguente recupera l'elenco di BLOB, quindi esegue il ciclo per tutti loro mostrando gli URI dei BLOB trovati. Per visualizzare il file è possibile copiare l'URI dalla finestra di comando e incollarlo in un browser.

//Listing contents of container
for (ListBlobItem blobItem : container.listBlobs()) {
    System.out.println("URI of blob is: " + blobItem.getUri());
}

Scaricare BLOB

Scaricare i BLOB nel disco locale mediante CloudBlob.DownloadToFile.

Il codice seguente consente di scaricare il BLOB caricato nella sezione precedente, aggiungendo un suffisso "_DOWNLOADED" al nome del BLOB in modo da visualizzare entrambi i file sul disco locale.

// Download blob. In most cases, you would have to retrieve the reference
// to cloudBlockBlob here. However, we created that reference earlier, and
// haven't changed the blob we're interested in, so we can reuse it.
// Here we are creating a new file to download to. Alternatively you can also pass in the path as a string into downloadToFile method: blob.downloadToFile("/path/to/new/file").
downloadedFile = new File(sourceFile.getParentFile(), "downloadedFile.txt");
blob.downloadToFile(downloadedFile.getAbsolutePath());

Pulire le risorse

Se i BLOB caricati non sono più necessari, è possibile eliminare l'intero contenitore usando CloudBlobContainer.DeleteIfExists. Questo metodo elimina anche i file nel contenitore.

try {
if(container != null)
    container.deleteIfExists();
} catch (StorageException ex) {
System.out.println(String.format("Service error. Http code: %d and error code: %s", ex.getHttpStatusCode(), ex.getErrorCode()));
}

System.out.println("Deleting the source, and downloaded files");

if(downloadedFile != null)
downloadedFile.deleteOnExit();

if(sourceFile != null)
sourceFile.deleteOnExit();

Passaggi successivi

In questo articolo è stato descritto il trasferimento di file tra il disco locale e Archiviazione BLOB di Azure con Java. Per altre informazioni sull'uso di Java, passare al repository di codice sorgente GitHub.