Inicio rápido: Biblioteca cliente de Azure Blob Storage para Java SE

Nota:

La opción Construir desde cero te guía en la creación de un proyecto, la instalación de paquetes, la escritura de código y la gestión de una aplicación básica de consola. Elige esta opción para entender cómo crear una aplicación que se conecte a Azure Blob Storage. Para automatizar tareas de despliegue y comenzar con un proyecto terminado, elige Empezar con una plantilla.

Nota:

La opción Start with a Template utiliza la CLI de Azure Developer para automatizar tareas de despliegue y proporciona un proyecto completado. Elige esta opción para explorar el código sin completar las tareas de configuración. Para instrucciones paso a paso para construir la app, elige Construir desde cero.

Introducción a la biblioteca cliente de Azure Blob Storage para que Java gestione blobs y contenedores.

En este artículo, siga los pasos para instalar el paquete y probar el código de ejemplo para tareas básicas.

En este artículo, se usa Azure Developer CLI para implementar recursos de Azure y ejecutar una aplicación de consola completa con solo unos cuantos comandos.

Sugerencia

Para aplicaciones Spring que utilizan recursos de Azure Storage, considera Spring Cloud Azure. Este proyecto de código abierto integra Spring con servicios de Azure. Para un ejemplo de Blob Storage, véase Upload a file to a Azure Storage Blob.

Documentación de referencia de la API | Código fuente de la biblioteca | Paquete (Maven) | Ejemplos

Requisitos previos

Configuración

En esta sección se explica cómo preparar un proyecto para que funcione con la biblioteca cliente de Azure Blob Storage para Java.

Creación del proyecto

Cree una aplicación de Java llamada blob-quickstart.

  1. En una ventana de consola (por ejemplo, PowerShell o Bash), use Maven para crear una nueva aplicación de consola con el nombre blob-quickstart. Escriba el siguiente comando mvn para crear un proyecto de Java "Hello world!":

    mvn archetype:generate `
        --define interactiveMode=n `
        --define groupId=com.blobs.quickstart `
        --define artifactId=blob-quickstart `
        --define archetypeArtifactId=maven-archetype-quickstart `
        --define archetypeVersion=1.4
    
  2. Revisa los resultados derivados de la generación del proyecto.

    [INFO] Scanning for projects...
    [INFO]
    [INFO] ------------------< org.apache.maven:standalone-pom >-------------------
    [INFO] Building Maven Stub Project (No POM) 1
    [INFO] --------------------------------[ pom ]---------------------------------
    [INFO]
    [INFO] >>> maven-archetype-plugin:3.1.2:generate (default-cli) > generate-sources @ standalone-pom >>>
    [INFO]
    [INFO] <<< maven-archetype-plugin:3.1.2:generate (default-cli) < generate-sources @ standalone-pom <<<
    [INFO]
    [INFO]
    [INFO] --- maven-archetype-plugin:3.1.2:generate (default-cli) @ standalone-pom ---
    [INFO] Generating project in Batch mode
    [INFO] ----------------------------------------------------------------------------
    [INFO] Using following parameters for creating project from Archetype: maven-archetype-quickstart:1.4
    [INFO] ----------------------------------------------------------------------------
    [INFO] Parameter: groupId, Value: com.blobs.quickstart
    [INFO] Parameter: artifactId, Value: blob-quickstart
    [INFO] Parameter: version, Value: 1.0-SNAPSHOT
    [INFO] Parameter: package, Value: com.blobs.quickstart
    [INFO] Parameter: packageInPathFormat, Value: com/blobs/quickstart
    [INFO] Parameter: version, Value: 1.0-SNAPSHOT
    [INFO] Parameter: package, Value: com.blobs.quickstart
    [INFO] Parameter: groupId, Value: com.blobs.quickstart
    [INFO] Parameter: artifactId, Value: blob-quickstart
    [INFO] Project created from Archetype in dir: C:\QuickStarts\blob-quickstart
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time:  7.056 s
    [INFO] Finished at: 2019-10-23T11:09:21-07:00
    [INFO] ------------------------------------------------------------------------
        ```
    
    
  3. Cambie a la carpeta blob-quickstart recién creada.

    cd blob-quickstart
    
  4. Dentro del directorio blob-quickstart , crea otro directorio llamado data. Esta carpeta es donde se crean y almacenan los archivos de datos del blob.

    mkdir data
    

Instalación de los paquetes

Abra el archivo pom.xml en el editor de texto.

Agregue azure-sdk-bom para depender de la versión más reciente de la biblioteca. En el fragmento de código siguiente, reemplace el marcador de posición {bom_version_to_target} por el número de versión. Al usar azure-sdk-bom, no necesitas especificar la versión de cada dependencia individual. Para obtener más información sobre el BOM, consulte el README del BOM del SDK de Azure.

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.azure</groupId>
            <artifactId>azure-sdk-bom</artifactId>
            <version>{bom_version_to_target}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

A continuación, agregue los siguientes elementos de dependencia al grupo de dependencias. Necesitas la dependencia de identidad de Azure para conexiones sin contraseña a los servicios de Azure.

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-storage-blob</artifactId>
</dependency>
<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-identity</artifactId>
</dependency>

Instalación del marco de la aplicación

En el directorio del proyecto, siga estos pasos para crear la estructura básica de la aplicación:

  1. Vaya al directorio /src/main/java/com/blobs/quickstart
  2. Abra el archivo App.java en un editor.
  3. Elimine la línea System.out.println("Hello world!");
  4. Agregue las directivas import necesarias

El código debe ser similar a este marco:

package com.blobs.quickstart;

/**
 * Azure Blob Storage quickstart
 */
import com.azure.identity.*;
import com.azure.storage.blob.*;
import com.azure.storage.blob.models.*;
import java.io.*;

public class App
{
    public static void main(String[] args) throws IOException
    {
        // Quickstart code goes here
    }
}

Usando la CLI de Azure Developer, puedes crear una cuenta de almacenamiento y ejecutar el código de ejemplo con solo unos pocos comandos. Puedes ejecutar el proyecto en tu entorno de desarrollo local o en un DevContainer.

Inicialización de la plantilla de Azure Developer CLI e implementación de recursos

En un directorio vacío, siga estos pasos para inicializar la plantilla azd, aprovisionar recursos de Azure y empezar a trabajar con el código:

  • Clone los recursos del repositorio de inicio rápido de GitHub e inicialice la plantilla localmente:

    azd init --template blob-storage-quickstart-java
    

    Se le pedirá la siguiente información:

    • Nombre de entorno: Azure la CLI para desarrolladores usa este valor como prefijo para todos los recursos de Azure que crea. El nombre debe ser único en todas las suscripciones de Azure y tener entre 3 y 24 caracteres. El nombre solo puede contener números y letras minúsculas.
  • Inicie sesión en Azure:

    azd auth login
    
  • Aprovisione e implemente los recursos en Azure:

    azd up
    

    Se le pedirá la siguiente información:

    • Suscripción: La suscripción de Azure para desplegar tus recursos.
    • Ubicación: La región de Azure para desplegar tus recursos.

    La implementación puede tardar unos minutos en finalizar. La salida del azd up comando incluye el nombre de la cuenta de almacenamiento recién creada, que necesita más adelante para ejecutar el código.

Ejecución del código de ejemplo

En este punto, los recursos se implementan en Azure y el código está casi listo para ejecutarse. Siga estos pasos para actualizar el nombre de la cuenta de almacenamiento en el código y ejecute la aplicación de consola de ejemplo:

  • Actualizar el nombre de la cuenta de almacenamiento:
    1. En el directorio local, vaya al directorio blob-quickstart/src/main/java/com/blobs/quickstart.
    2. Abra el archivo App.java en su editor. Busque el marcador de posición <storage-account-name> y reemplácelo por el nombre real de la cuenta de almacenamiento creada por el comando azd up.
    3. Guarde los cambios.
  • Ejecute el proyecto:
    1. Navegue hasta el directorio blob-quickstart que contiene el archivo pom.xml. Compile el proyecto utilizando el siguiente comando mvn:
      mvn compile
      
    2. Empaquete el código compilado en su formato distribuible:
      mvn package
      
    3. Ejecute el siguiente comando mvn para ejecutar la aplicación:
      mvn exec:java
      
  • Observar la salida: esta aplicación crea un archivo de prueba en la carpeta de datos local y lo carga en un contenedor de la cuenta de almacenamiento. Después, en el ejemplo se enumeran los blobs del contenedor y se descarga el archivo con un nombre nuevo para que pueda comparar los archivos antiguo y nuevo.

Para más información sobre cómo funciona el código de ejemplo, consulte Ejemplos de código.

Cuando haya terminado de probar el código, consulte la sección Limpieza de recursos para eliminar los recursos creados por el comando azd up.

Modelo de objetos

Azure Blob Storage está optimizado para el almacenamiento de cantidades masivas de datos no estructurados. Los datos no estructurados no se ciñen a ningún un modelo de datos o definición concretos, como texto o datos binarios. Blob Storage ofrece tres tipos de recursos:

  • La cuenta de almacenamiento
  • Un contenedor en la cuenta de almacenamiento
  • Un blob en el contenedor

En el siguiente diagrama se muestra la relación entre estos recursos.

Diagrama que muestra una cuenta de almacenamiento que contiene un contenedor de blobs y un blob.

Use las siguientes clases de Java para interactuar con estos recursos:

  • BlobServiceClient: La BlobServiceClient clase gestiona los recursos de Azure Storage y los contenedores de blobs. La cuenta de almacenamiento proporciona el espacio de nombres de nivel superior para el Blob service.
  • BlobServiceClientBuilder: La BlobServiceClientBuilder clase proporciona una API fluida para configurar y crear BlobServiceClient objetos.
  • BlobContainerClient: La BlobContainerClient clase gestiona contenedores de Azure Storage y sus blobs.
  • BlobClient: La BlobClient clase gestiona los blobs de Azure Storage.
  • BlobItem: La clase BlobItem representa los blobs individuales devueltos por una llamada a listBlobs.

Ejemplos de código

Estos fragmentos de código de ejemplo muestran cómo realizar las siguientes acciones con la biblioteca cliente de Azure Blob Storage para Java:

Importante

Añade las dependencias y directivas descritas en Configuración antes de usar los ejemplos de código.

Nota:

La plantilla de Azure Developer CLI incluye un archivo con código de ejemplo ya implementado. En los ejemplos siguientes se proporcionan detalles para cada parte del código de ejemplo. La plantilla implementa el método de autenticación sin contraseña recomendado, como se describe en la sección Autenticación en Azure. El método de cadena de conexión se muestra como una alternativa, pero no se usa en la plantilla y no se recomienda para el código de producción.

Autenticación en Azure y autorización del acceso a datos de blobs

Las solicitudes de aplicación a Azure Blob Storage deben estar autorizadas. El uso de la clase DefaultAzureCredential que proporciona la biblioteca cliente de Azure.Identity es el enfoque recomendado para implementar conexiones sin contraseña a los servicios de Azure en el código, incluido Blob Storage.

También puede autorizar las solicitudes a Azure Blob Storage mediante la clave de acceso de la cuenta. Sin embargo, este enfoque debe usarse con precaución. Los desarrolladores deben ser diligentes para no exponer nunca las claves de acceso en una ubicación que no sea segura. Cualquier persona que tenga la clave de acceso puede autorizar las solicitudes en la cuenta de almacenamiento y tiene acceso eficaz a todos los datos. DefaultAzureCredential ofrece ventajas de seguridad y administración mejoradas con respecto la clave de cuenta para permitir la autenticación sin contraseña. Ambas opciones se muestran en el ejemplo siguiente.

DefaultAzureCredential es una clase proporcionada por la biblioteca cliente de Azure Identity para Java. DefaultAzureCredential admite varios métodos de autenticación y determina qué método se usa en tiempo de ejecución. Este enfoque permite que la aplicación use diferentes métodos de autenticación en distintos entornos (local frente a producción) sin implementar código específico del entorno.

Puede encontrar el orden y las ubicaciones en las que DefaultAzureCredential busca credenciales en la información general de la biblioteca de identidades de Azure.

Por ejemplo, tu aplicación puede autenticarse usando tus credenciales de inicio de sesión de Visual Studio Code al desarrollar localmente. Tu aplicación podrá entonces usar una identidad gestionada tras el despliegue en Azure. No se necesitan cambios de código para esta transición.

Asignación de roles a la cuenta de usuario de Microsoft Entra

Al desarrollar localmente, asegúrese de que la cuenta de usuario que accede a los datos de blob tenga los permisos correctos. Necesitarás Storage Blob Data Contributor para leer y escribir datos de blobs. Para asignarse este rol a sí mismo, necesitará que se le asigne el rol Administrador de acceso de usuario u otro rol que incluya la acción Microsoft.Authorization/roleAssignments/write. Puede asignar roles RBAC de Azure a un usuario mediante Azure Portal, la CLI de Azure o Azure PowerShell. Para más información sobre el rol Colaborador de datos de Storage Blob , consulte Colaborador de datos de Storage Blob. Para más información sobre los ámbitos disponibles para las asignaciones de roles, consulte Descripción del ámbito de RBAC de Azure.

En este escenario, asignará permisos a la cuenta de usuario, cuyo ámbito es la cuenta de almacenamiento, a fin de seguir el principio de privilegios mínimos. Esta práctica solo proporciona a los usuarios los permisos mínimos necesarios y crea entornos de producción más seguros.

En el ejemplo siguiente se asignará el rol Colaborador de datos de blobs de almacenamiento a la cuenta de usuario, que proporciona acceso de lectura y escritura a los datos de blobs de la cuenta de almacenamiento.

Importante

En la mayoría de los casos, la asignación de roles tardará un minuto o dos en propagarse en Azure, pero en casos excepcionales puede tardar hasta ocho minutos. Si recibe errores de autenticación al ejecutar por primera vez el código, espere unos instantes e inténtelo de nuevo.

  1. En Azure Portal, busque la cuenta de almacenamiento mediante la barra de búsqueda principal o el panel de navegación de la izquierda.

  2. En la página de información general de la cuenta de almacenamiento, seleccione Control de acceso (IAM) en el menú de la izquierda.

  3. En la página Control de acceso (IAM), seleccione la pestaña Asignación de roles.

  4. Seleccione + Agregar en el menú superior y, a continuación, Agregar asignación de roles en el menú desplegable resultante.

    Una captura de pantalla que muestra cómo asignar un rol.

  5. Puede usar el cuadro de búsqueda para filtrar los resultados por el rol deseado. En este ejemplo, busque Colaborador de datos de blobs de almacenamiento y seleccione el resultado coincidente y, a continuación, elija Siguiente.

  6. En la pestaña Asignar acceso a, seleccione Usuario, grupo o entidad de servicio y, a continuación, elija + Seleccionar miembros.

  7. En el cuadro de diálogo, busque el nombre de usuario de Microsoft Entra (normalmente su dirección de correo electrónico de user@domain) y, a continuación, elija Seleccionar en la parte inferior del cuadro de diálogo.

  8. Seleccione Revisar y asignar para ir a la página final y, a continuación, de nuevo Revisar y asignar para completar el proceso.

Inicie sesión y conecte el código de la aplicación a Azure mediante DefaultAzureCredential

Autoriza el acceso a los datos de tu cuenta de almacenamiento siguiendo estos pasos:

  1. Autentica usando la misma cuenta de Microsoft Entra a la que asignaste el rol de cuenta de almacenamiento. Utiliza CLI de Azure, Visual Studio Code o Azure PowerShell.

    Inicie sesión en Azure a través de la CLI de Azure mediante el comando siguiente:

    az login
    
  2. Para usar DefaultAzureCredential, añade la dependencia azure-identity a pom.xml:

    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-identity</artifactId>
    </dependency>
    
  3. Agregue este código al método main. Cuando el código se ejecuta en tu estación de trabajo local, utiliza las credenciales de desarrollador de la herramienta prioritaria en la que has iniciado sesión para autenticarte en Azure, como CLI de Azure o Visual Studio Code.

    /*
     * The default credential first checks environment variables for configuration
     * If environment configuration is incomplete, it will try managed identity
     */
    DefaultAzureCredential defaultCredential = new DefaultAzureCredentialBuilder().build();
    
    // Azure SDK client builders accept the credential as a parameter
    // TODO: Replace <storage-account-name> with your actual storage account name
    BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
            .endpoint("https://<storage-account-name>.blob.core.windows.net/")
            .credential(defaultCredential)
            .buildClient();
    
  4. Actualice el nombre de la cuenta de almacenamiento en el URI de su BlobServiceClient. Encuentra el nombre de la cuenta de almacenamiento en la página de resumen del portal de Azure.

    Una captura de pantalla que muestra cómo encontrar el nombre de la cuenta de almacenamiento.

    Nota:

    Cuando se implementa en Azure, se puede usar este mismo código para autorizar solicitudes a Azure Storage desde una aplicación que se ejecute en Azure. Sin embargo, debe habilitar la identidad administrada en la aplicación en Azure. A continuación, configure la cuenta almacenamiento para permitir que esa identidad administrada se conecte. Para obtener instrucciones detalladas sobre la configuración de esta conexión entre los servicios de Azure, consulte el tutorial Autenticación desde aplicaciones hospedadas en Azure.

Crear un contenedor

Cree un nuevo contenedor en su cuenta de almacenamiento llamando al método createBlobContainer en el objeto blobServiceClient. En este ejemplo, el código añade un valor GUID al nombre del contenedor para asegurarse de que es único.

Agregue este código al final del método main:

// Create a unique name for the container
String containerName = "quickstartblobs" + java.util.UUID.randomUUID();

// Create the container and return a container client object
BlobContainerClient blobContainerClient = blobServiceClient.createBlobContainer(containerName);

Para más información y ejemplos, véase Crear un contenedor de blob con Java.

Importante

Los nombres de contenedor deben estar en minúsculas. Para obtener más información sobre la asignación de nombres a contenedores y blobs, consulte Asignación de nombres y referencia a contenedores, blobs y metadatos.

Carga de los blobs en un contenedor

Cargue un blob en un contenedor llamando al método uploadFromFile. El código del ejemplo crea un archivo de texto en el directorio local de datos para cargarlo en el contenedor.

Agregue este código al final del método main:

// Create the ./data/ directory and a file for uploading and downloading
String localPath = "./data/";
new File(localPath).mkdirs();
String fileName = "quickstart" + java.util.UUID.randomUUID() + ".txt";

// Get a reference to a blob
BlobClient blobClient = blobContainerClient.getBlobClient(fileName);

// Write text to the file
FileWriter writer = null;
try
{
    writer = new FileWriter(localPath + fileName, true);
    writer.write("Hello, World!");
    writer.close();
}
catch (IOException ex)
{
    System.out.println(ex.getMessage());
}

System.out.println("\nUploading to Blob storage as blob:\n\t" + blobClient.getBlobUrl());

// Upload the blob
blobClient.uploadFromFile(localPath + fileName);

Para más información y ejemplos, véase Subir un blob con Java.

Listar los blobs en un contenedor

Enumere los blobs en el contenedor llamando al método listBlobs. En este caso, solo has añadido un blob al contenedor, así que la operación de listado solo devuelve ese blob.

Agregue este código al final del método main:

System.out.println("\nListing blobs...");

// List the blob(s) in the container.
for (BlobItem blobItem : blobContainerClient.listBlobs()) {
    System.out.println("\t" + blobItem.getName());
}

Para más información y ejemplos, consulte Listar blobs con Java.

Descargar blobs

Descargue el blob creado previamente llamando al método downloadToFile. El código de ejemplo añade un sufijo de DOWNLOAD al nombre del archivo para que puedas ver ambos archivos en el sistema de archivos local.

Agregue este código al final del método main:

// Download the blob to a local file

// Append the string "DOWNLOAD" before the .txt extension for comparison purposes
String downloadFileName = fileName.replace(".txt", "DOWNLOAD.txt");

System.out.println("\nDownloading blob to\n\t " + localPath + downloadFileName);

blobClient.downloadToFile(localPath + downloadFileName);

Para más información y ejemplos, véase Descargar un blob con Java.

Eliminación de un contenedor

El siguiente código limpia los recursos que la app creó eliminando todo el contenedor usando el método de eliminación . También elimina los archivos locales creados por la aplicación.

La aplicación se pausa para esperar la entrada del usuario llamando a System.console().readLine() antes de eliminar el blob, el contenedor y los archivos locales. Esta pausa te da la oportunidad de verificar que la app creó correctamente los recursos antes de eliminarlos.

Agregue este código al final del método main:

File downloadedFile = new File(localPath + downloadFileName);
File localFile = new File(localPath + fileName);

// Clean up resources
System.out.println("\nPress the Enter key to begin clean up");
System.console().readLine();

System.out.println("Deleting blob container...");
blobContainerClient.delete();

System.out.println("Deleting the local source and downloaded files...");
localFile.delete();
downloadedFile.delete();

System.out.println("Done");

Para más información y ejemplos, consulte Eliminar y restaurar un contenedor de blob con Java.

Ejecución del código

Esta aplicación crea un archivo de prueba en la carpeta local y lo carga en Blob Storage. Después, en el ejemplo se enumeran los blobs del contenedor y se descarga el archivo con un nombre nuevo para que pueda comparar los archivos antiguo y nuevo.

Sigue estos pasos para compilar, empaquetar y ejecutar el código:

  1. Navegue hasta el directorio que contiene el archivo pom.xml y compile el proyecto mediante el siguiente comando mvn:
    mvn compile
    
  2. Empaquete el código compilado en su formato distribuible:
    mvn package
    
  3. Ejecute el siguiente comando mvn para ejecutar la aplicación:
    mvn exec:java -D exec.mainClass=com.blobs.quickstart.App -D exec.cleanupDaemonThreads=false
    
    Para simplificar el paso de ejecución, añade exec-maven-plugin a pom.xml y configúralo como se muestra en el siguiente código:
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>exec-maven-plugin</artifactId>
      <version>1.4.0</version>
      <configuration>
        <mainClass>com.blobs.quickstart.App</mainClass>
        <cleanupDaemonThreads>false</cleanupDaemonThreads>
      </configuration>
    </plugin>
    
    Con esta configuración, ejecuta la aplicación con el siguiente comando:
    mvn exec:java
    

La salida de la aplicación es similar al ejemplo siguiente (se omiten los valores UUID para mejorar la legibilidad):

Azure Blob Storage - Java quickstart sample

Uploading to Blob storage as blob:
        https://mystorageacct.blob.core.windows.net/quickstartblobsUUID/quickstartUUID.txt

Listing blobs...
        quickstartUUID.txt

Downloading blob to
        ./data/quickstartUUIDDOWNLOAD.txt

Press the Enter key to begin clean up

Deleting blob container...
Deleting the local source and downloaded files...
Done

Antes de comenzar el proceso de limpieza, compruebe la carpeta data para ver si están los dos archivos. Puede compararlos y comprobar que son idénticos.

Limpieza de recursos

Después de comprobar los archivos y finalizar las pruebas, presione Entrar para eliminar los archivos de prueba junto con el contenedor que creó en la cuenta de almacenamiento. También puede usar la CLI de Azure para eliminar recursos.

Cuando haya terminado con el inicio rápido, limpie los recursos que creó mediante la ejecución del comando siguiente:

azd down

Recibes un aviso para confirmar la eliminación de los recursos. Escriba y para confirmar.

Paso siguiente