Ejercicio: Carga de una imagen en la cuenta de Azure Storage
Ahora se agregará código para cargar una imagen en la cuenta de Azure Storage. En este ejemplo, vamos a cargar la siguiente imagen en el contenedor de Azure Storage.
Si está trabajando en su máquina local, haga clic con el botón derecho en esta imagen y guárdela en la misma carpeta en la que está la aplicación.
Si está trabajando en el entorno de espacio aislado de Microsoft Learn, ejecute el siguiente comando en la carpeta de la aplicación para descargar la imagen en el espacio aislado:
wget https://github.com/MicrosoftDocs/mslearn-connect-app-to-azure-storage/blob/main/images/docs-and-friends-selfie-stick.png?raw=true -O docs-and-friends-selfie-stick.png
En ambos casos, el nombre de la imagen debe ser docs-and-friends-selfie-stick.png.
Carga de una imagen en almacenamiento de blobs
Para trabajar con objetos de blob individuales en la cuenta de Azure Storage, se usa un objeto BlobClient
. Para obtener un objeto BlobClient
, llame al método GetBlobClient
en el objeto BlobContainerClient
del contenedor donde se almacenará el blob. Al llamar al método GetBlobClient
, también se proporciona un nombre para el blob en el contenedor. En el ejemplo, el nombre del blob será el mismo que el del archivo.
Una vez que tenga un objeto
BlobClient
, puede llamar al métodoUpload
para cargar un archivo en Azure Blob Storage. Agregue el código siguiente al archivo Program.cs:string blobName = "docs-and-friends-selfie-stick"; string fileName = "docs-and-friends-selfie-stick.png"; BlobClient blobClient = container.GetBlobClient(blobName); blobClient.Upload(fileName, true);
El segundo argumento del método
Upload
especifica si se puede sobrescribir un objeto de blob existente con el mismo nombre. De manera predeterminada, este valor esfalse
. En este caso, se especificarátrue
para permitir que el programa se ejecute varias veces.
Enumeración de los objetos de un contenedor de Azure Blob Storage
Para comprobar que el programa ha funcionado, se usará otra funcionalidad del SDK de Azure Storage Blob para enumerar los objetos almacenados en un contenedor de almacenamiento de blobs. Esto se puede hacer mediante una llamada al método GetBlobs
en un objeto BlobContainerClient
. El método GetBlobs
devuelve una lista paginable de objetos BlobItem
que contienen datos sobre cada blob del contenedor.
Agregue el siguiente código al programa después del código que agregó previamente y guarde el archivo:
var blobs = container.GetBlobs(); foreach (var blob in blobs) { Console.WriteLine($"{blob.Name} --> Created On: {blob.Properties.CreatedOn:yyyy-MM-dd HH:mm:ss} Size: {blob.Properties.ContentLength}"); }
Este código llama a
GetBlobs
en el objetoBlobContainerClient
para el contenedor photos. Después, itera por cada blob, del que imprime el nombre, la fecha y la hora de creación, y el tamaño. Al ejecutar el programa, este código debe aparecer como una sola línea para la imagen que se ha cargado.Si quiere comprobar el trabajo, el archivo Program.cs final debe ser similar al siguiente.
using System; using Microsoft.Extensions.Configuration; using System.IO; using Azure.Storage.Blobs; namespace PhotoSharingApp { class Program { static void Main(string[] args) { var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json"); var configuration = builder.Build(); // Get a connection string to our Azure Storage account. var connectionString = configuration.GetConnectionString("StorageAccount"); // Get a reference to the container client object so you can create the "photos" container string containerName = "photos"; BlobContainerClient container = new BlobContainerClient(connectionString, containerName); container.CreateIfNotExists(); // Uploads the image to Blob storage. If a blb already exists with this name it will be overwritten string blobName = "docs-and-friends-selfie-stick"; string fileName = "docs-and-friends-selfie-stick.png"; BlobClient blobClient = container.GetBlobClient(blobName); blobClient.Upload(fileName, true); // List out all the blobs in the container var blobs = container.GetBlobs(); foreach (var blob in blobs) { Console.WriteLine($"{blob.Name} --> Created On: {blob.Properties.CreatedOn:yyyy-MM-dd HH:mm:ss} Size: {blob.Properties.ContentLength}"); } } } }
Ejecución la aplicación
Compile y ejecute la aplicación para comprobar que todo funciona y cargue la imagen en Azure Blob Storage.
Nota:
Compruebe que se encuentra en el directorio PhotoSharingApp.
dotnet run
Enhorabuena
Ha aprendido los aspectos básicos de trabajar con el paquete del SDK Azure Storage Blobs y Azure Blob Storage. Si quiere, puede profundizar más mediante la creación de otro contenedor, la carga de más imágenes en la cuenta de almacenamiento o la eliminación de una imagen. Puede obtener más información en la página de GitHub de la biblioteca cliente Azure Storage Blobs para .NET.
Carga de una imagen en almacenamiento de blobs
Para trabajar con objetos de blob en el contenedor de Azure Storage, se usa un objeto BlockBlobClient
. El objeto BlockBlobClient
tiene métodos para cargar, descargar, enumerar y eliminar objetos de blob en un contenedor. Para obtener BlockBlobObject
, llame al método getBlockBlobClient
en el objeto ContainerClient
. Después, puede usar el método uploadFile
para cargar la imagen en Azure Storage.
Agregue este código al archivo de programa index.js inmediatamente después del código que crea el contenedor:
const filename = 'docs-and-friends-selfie-stick.png'; const blockBlobClient = containerClient.getBlockBlobClient(filename); blockBlobClient.uploadFile(filename);
Enumeración de los objetos de un contenedor de Azure Blob Storage
Para comprobar que el código funciona, puede llamar al método
listBlobsFlat
en el objetoContainerClient
del programa. Agregue este código al archivo index.js y guarde el archivo:let blobs = containerClient.listBlobsFlat(); let blob = await blobs.next(); while (!blob.done) { console.log(`${blob.value.name} --> Created: ${blob.value.properties.createdOn} Size: ${blob.value.properties.contentLength}`); blob = await blobs.next(); }
Este código imprimirá todos los blobs del contenedor de Azure Blob Storage con la fecha de creación del blob y su tamaño. En el programa, el código debe imprimir una fila que represente la imagen única que se ha cargado.
El archivo final debería tener este aspecto.
#!/usr/bin/env node require('dotenv').config(); const { BlobServiceClient } = require("@azure/storage-blob"); const storageAccountConnectionString = process.env.AZURE_STORAGE_CONNECTION_STRING; const blobServiceClient = BlobServiceClient.fromConnectionString(storageAccountConnectionString); async function main() { // Create a container (folder) if it does not exist const containerName = 'photos'; const containerClient = blobServiceClient.getContainerClient(containerName); const containerExists = await containerClient.exists() if ( !containerExists) { const createContainerResponse = await containerClient.createIfNotExists(); console.log(`Create container ${containerName} successfully`, createContainerResponse.succeeded); } else { console.log(`Container ${containerName} already exists`); } // Upload the file const filename = 'docs-and-friends-selfie-stick.png'; const blockBlobClient = containerClient.getBlockBlobClient(filename); blockBlobClient.uploadFile(filename); // Get a list of all the blobs in the container let blobs = containerClient.listBlobsFlat(); let blob = await blobs.next(); while (!blob.done) { console.log(`${blob.value.name} --> Created: ${blob.value.properties.createdOn} Size: ${blob.value.properties.contentLength}`); blob = await blobs.next(); } } main();
Ejecución de la aplicación
Compile y ejecute la aplicación.
Nota:
Compruebe que se encuentra en el directorio PhotoSharingApp.
node index.js
Sugerencia
Si se produce un error sobre el uso de la palabra clave
await
, asegúrese de que ha agregado la palabra claveasync
a la definición de funciónmain
en el último paso de las instrucciones anteriores.
Enhorabuena
Ha aprendido los aspectos básicos de trabajar con la biblioteca cliente de Azure Storage Blob para JavaScript y Azure Blob Storage. Si quiere, puede profundizar más mediante la creación de otro contenedor, la carga de más imágenes en la cuenta de almacenamiento o la eliminación de una imagen. En la página de la biblioteca cliente de Azure Storage Blob para JavaScript de npm.js se ofrecen muchos ejemplos de cómo usar la biblioteca.