Carga de un blob con TypeScript

En este artículo se muestra cómo cargar un blob con la biblioteca cliente de Azure Storage para JavaScript. Puede cargar datos en un blob en bloques desde una ruta de acceso de archivo, una secuencia, un búfer o una cadena de texto. También puede cargar blobs con etiquetas de índice.

Requisitos previos

  • Los ejemplos de este artículo asumen que ya tiene un proyecto configurado para trabajar con la librería cliente Azure Blob Storage para JavaScript. Para obtener más información sobre la configuración del proyecto, incluida la instalación de paquetes, la importación de módulos y la creación de un objeto cliente autorizado para trabajar con recursos de datos, consulte Introducción a Azure Blob Storage y TypeScript.
  • El mecanismo de autorización debe tener permisos para realizar una operación de carga. Para más información, consulte la guía de autorización para las siguientes operaciones de la API de REST:

Carga de datos en un blob en bloques

Puede usar cualquiera de los métodos siguientes para cargar datos en un blob en bloques:

Se puede llamar a cada uno de estos métodos mediante un objeto BlockBlobClient.

Carga de un blob en bloques desde una ruta de acceso de archivo

El siguiente ejemplo carga un blob de bloque desde una ruta de archivo local:

async function uploadBlobFromLocalPath(
  containerClient: ContainerClient,
  blobName: string,
  localFilePath: string
): Promise<void> {
  // Create blob client from container client
  const blockBlobClient: BlockBlobClient = containerClient.getBlockBlobClient(blobName);

  await blockBlobClient.uploadFile(localFilePath);
}

Carga de un blob en bloques desde una secuencia

En el siguiente ejemplo se carga un blob en bloques al crear y cargar un flujo legible:

async function uploadBlobFromReadStream(
  containerClient: ContainerClient,
  blobName: string,
  readStream: fs.ReadStream
): Promise<void> {
  // Create blob client from container client
  const blockBlobClient: BlockBlobClient = containerClient.getBlockBlobClient(blobName);

  await blockBlobClient.uploadStream(readStream);
}

Carga de un blob en bloques desde un búfer

El siguiente ejemplo carga un blob de bloques desde un buffer Node.js:

async function uploadBlobFromBuffer(
  containerClient: ContainerClient, blobName: string, buffer: Buffer
): Promise<void> {
  // Create blob client from container client
  const blockBlobClient: BlockBlobClient = containerClient.getBlockBlobClient(blobName);

  // Upload buffer
  await blockBlobClient.uploadData(buffer);
}

Carga de un blob en bloques desde una cadena

El siguiente ejemplo carga un blob de bloque desde una cadena:

async function uploadBlobFromString(
  containerClient: ContainerClient,
  blobName: string,
  fileContents: string
): Promise<void> {
  // Create blob client from container client
  const blockBlobClient: BlockBlobClient = containerClient.getBlockBlobClient(blobName);

  await blockBlobClient.upload(fileContents, fileContents.length);
}

Carga de un blob en bloques con opciones de configuración

Puede definir las opciones de configuración de la biblioteca cliente al cargar un blob. Estas opciones se pueden ajustar para mejorar el rendimiento, mejorar la confiabilidad y optimizar los costes. Los ejemplos de código de esta sección muestran cómo establecer las opciones de configuración usando la interfaz BlockBlobParallelUploadOptions y cómo pasar esas opciones como parámetro a una llamada al método de carga.

Especificación de opciones de transferencia de datos al cargar

Puede configurar las propiedades en BlockBlobParallelUploadOptions para mejorar el rendimiento de las operaciones de transferencia de datos. En la tabla siguiente se enumeran las propiedades que puede configurar, junto con una descripción:

Propiedad Descripción
blockSize Tamaño máximo de bloque que se va a transferir para cada solicitud como parte de una operación de carga.
concurrency El número máximo de solicitudes paralelas que se emiten en cualquier momento dado como parte de una única transferencia paralela.
maxSingleShotSize Si el tamaño de los datos fuera menor o igual que este valor, se cargará en una sola colocación en lugar de dividirse en fragmentos. Si los datos se cargasen en una sola captura, se omitirá el tamaño del bloque. El valor predeterminado es 256 MiB.

El siguiente ejemplo de código muestra cómo establecer valores para BlockBlobParallelUploadOptions e incluir las opciones como parte de una llamada al método de carga. Los valores proporcionados en las muestras no pretenden ser una recomendación. Para ajustar correctamente estos valores, debe tener en cuenta las necesidades específicas de la aplicación.

async function uploadWithTransferOptions(
  containerClient: ContainerClient,
  blobName: string,
  localFilePath: string
): Promise<void> {
  // Specify data transfer options
  const uploadOptions: BlockBlobParallelUploadOptions = {
    blockSize: 4 * 1024 * 1024, // 4 MiB max block size
    concurrency: 2, // maximum number of parallel transfer workers
    maxSingleShotSize: 8 * 1024 * 1024, // 8 MiB initial transfer size
  };

  // Create blob client from container client
  const blockBlobClient: BlockBlobClient = containerClient.getBlockBlobClient(blobName);

  await blockBlobClient.uploadFile(localFilePath, uploadOptions);
}

Carga de un blob en bloques con etiquetas de índice

Las etiquetas de índice de blobs clasifican los datos de la cuenta de almacenamiento mediante atributos de etiqueta clave-valor. Estas etiquetas se indexan y se exponen automáticamente como un índice multidimensional que se puede buscar para encontrar fácilmente los datos.

El siguiente ejemplo carga un blob de bloque con etiquetas de índice establecidas usando BlockBlobParallelUploadOptions:

async function uploadBlobWithIndexTags(
  containerClient: ContainerClient,
  blobName: string,
  localFilePath: string
): Promise<void> {
  // Specify index tags for blob
  const uploadOptions: BlockBlobParallelUploadOptions = {
    tags: {
      'Sealed': 'false',
      'Content': 'image',
      'Date': '2023-06-01',
    }
  };

  // Create blob client from container client
  const blockBlobClient: BlockBlobClient = containerClient.getBlockBlobClient(blobName);

  await blockBlobClient.uploadFile(localFilePath, uploadOptions);
}

Establecimiento del nivel de acceso de un blob durante la carga

El uso de la interfaz BlockBlobParallelUploadOptions permite establecer el nivel de acceso de un blob al cargarlo. En el ejemplo de código siguiente se muestra cómo establecer el nivel de acceso al cargar un blob:

async function uploadBlobWithAccessTier(
  containerClient: ContainerClient,
  blobName: string,
  localFilePath: string
): Promise<void> {
  // Upload blob to 'Cool' access tier
  const uploadOptions: BlockBlobParallelUploadOptions = {
    tier: 'Cool'
  };

  // Create blob client from container client
  const blockBlobClient: BlockBlobClient = containerClient.getBlockBlobClient(blobName);

  await blockBlobClient.uploadFile(localFilePath, uploadOptions);
}

Solo se permite establecer el nivel de acceso en los blobs en bloques. Puede establecer el nivel de acceso de un blob en bloques en Hot, Cool, Cold o Archive. Para establecer el nivel de acceso en Cold, debe usar la versión mínima de la biblioteca cliente 12.13.0.

Si desea obtener más información sobre los niveles de acceso, consulte Información general sobre los niveles de acceso.

Recursos

Para obtener más información sobre cómo cargar blobs usando la biblioteca cliente de Azure Blob Storage para JavaScript y TypeScript, consulte los recursos siguientes.

Operaciones de API REST

El SDK de Azure para JavaScript y TypeScript contiene bibliotecas que se crean a partir de la API de REST de Azure, lo que le permite interactuar con las operaciones de API de REST a través de paradigmas de lenguajes conocidos. Los métodos de la biblioteca cliente para cargar blobs usan las siguientes operaciones de API REST:

Ejemplos de código

Visualización de ejemplos de código de este artículo (GitHub):

Recursos de la biblioteca cliente

Consulte también