Share via


Caricare un BLOB con TypeScript

Questo articolo illustra come caricare un BLOB usando la libreria client di Archiviazione di Azure per JavaScript. È possibile caricare dati in un BLOB in blocchi da un percorso di file, un flusso, un buffer o una stringa di testo. È anche possibile caricare BLOB con tag di indice.

Prerequisiti

  • Gli esempi in questo articolo presuppongono che sia già stato configurato un progetto per lavorare con la libreria client Archiviazione BLOB di Azure per JavaScript. Per informazioni sulla configurazione del progetto, tra cui l'installazione del pacchetto, l'importazione di moduli e la creazione di un oggetto client autorizzato per l'uso con le risorse dati, vedere Introduzione a Archiviazione BLOB di Azure e TypeScript.
  • Il meccanismo di autorizzazione deve disporre delle autorizzazioni per eseguire un'operazione di caricamento. Per altre informazioni, vedere le linee guida sull'autorizzazione per le operazioni API REST seguenti:

Caricare dati in un BLOB in blocchi

È possibile usare uno dei metodi seguenti per caricare i dati in un BLOB in blocchi:

Ognuno di questi metodi può essere chiamato usando un oggetto BlockBlobClient .

Caricare un BLOB in blocchi da un percorso di file

L'esempio seguente carica un BLOB in blocchi da un percorso di file locale:

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);
}

Caricare un BLOB in blocchi da un flusso

L'esempio seguente carica un BLOB in blocchi creando un flusso leggibile e caricando il flusso:

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);
}

Caricare un BLOB in blocchi da un buffer

L'esempio seguente carica un BLOB in blocchi da 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);
}

Caricare un BLOB in blocchi da una stringa

L'esempio seguente carica un BLOB in blocchi da una stringa:

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);
}

Caricare un BLOB in blocchi con le opzioni di configurazione

È possibile definire le opzioni di configurazione della libreria client durante il caricamento di un BLOB. Queste opzioni possono essere ottimizzate per migliorare le prestazioni, migliorare l'affidabilità e ottimizzare i costi. Gli esempi di codice in questa sezione illustrano come impostare le opzioni di configurazione usando l'interfaccia BlockBlobParallelUploadOptions e come passare tali opzioni come parametro a una chiamata al metodo di caricamento.

Specificare le opzioni di trasferimento dei dati al caricamento

È possibile configurare le proprietà in BlockBlobParallelUploadOptions per migliorare le prestazioni per le operazioni di trasferimento dei dati. La tabella seguente elenca le proprietà che è possibile configurare, insieme a una descrizione:

Proprietà Descrizione
blockSize Dimensione massima del blocco da trasferire per ogni richiesta come parte di un'operazione di caricamento.
concurrency Numero massimo di richieste parallele inviate in qualsiasi momento come parte di un singolo trasferimento parallelo.
maxSingleShotSize Se le dimensioni dei dati sono minori o uguali a questo valore, vengono caricate in un singolo inserimento anziché suddivise in blocchi. Se i dati vengono caricati in un singolo colpo, la dimensione del blocco viene ignorata. Il valore predefinito è 256 MiB.

Nell'esempio di codice seguente viene illustrato come impostare i valori per BlockBlobParallelUploadOptions e includere le opzioni come parte di una chiamata al metodo di caricamento. I valori forniti negli esempi non sono destinati a essere una raccomandazione. Per ottimizzare correttamente questi valori, è necessario considerare le esigenze specifiche dell'app.

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);
}

Caricare un BLOB in blocchi con tag di indice

I tag di indice BLOB classificano i dati nell'account di archiviazione usando gli attributi dei tag chiave-valore. Questi tag vengono indicizzati e esposti automaticamente come indice multidimensionale ricercabile per trovare facilmente i dati.

L'esempio seguente carica un BLOB in blocchi con tag di indice impostati 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);
}

Impostare il livello di accesso di un BLOB al caricamento

È possibile impostare il livello di accesso di un BLOB al caricamento usando l'interfaccia BlockBlobParallelUploadOptions . L'esempio di codice seguente illustra come impostare il livello di accesso durante il caricamento di 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);
}

L'impostazione del livello di accesso è consentita solo per i BLOB in blocchi. È possibile impostare il livello di accesso per un BLOB in blocchi su Hot, Cool, Coldo Archive. Per impostare il livello di accesso su Cold, è necessario usare una versione minima della libreria client 12.13.0.

Per altre informazioni sui livelli di accesso, vedere Panoramica dei livelli di accesso.

Risorse

Per altre informazioni sul caricamento di BLOB usando la libreria client Archiviazione BLOB di Azure per JavaScript e TypeScript, vedere le risorse seguenti.

Operazioni dell'API REST

Azure SDK per JavaScript e TypeScript contiene librerie basate sull'API REST di Azure, che consentono di interagire con le operazioni dell'API REST tramite paradigmi del linguaggio familiari. I metodi della libreria client per il caricamento dei BLOB usano le operazioni API REST seguenti:

Esempi di codice

Visualizzare esempi di codice di questo articolo (GitHub):

Risorse della libreria client

Vedi anche