Caricare un BLOB con JavaScript o TypeScript

Questo articolo illustra come caricare un BLOB usando la libreria client 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 indice.

Prerequisiti

  • Gli esempi in questo articolo presuppongono che sia già stato configurato un progetto per l'uso con la libreria client di Archiviazione BLOB di Azure per JavaScript. Per informazioni sulla configurazione del progetto, incluse l'installazione del pacchetto, l'importazione di moduli e la creazione di un oggetto client autorizzato per l'uso con le risorse dati, consultare Introduzione ad Archiviazione BLOB di Azure e JavaScript.
  • Il meccanismo di autorizzazione deve disporre delle autorizzazioni per eseguire un'operazione di caricamento. Per altre informazioni, vedere le linee guida per l'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:

// containerClient: ContainerClient object
// blobName: string, includes file extension if provided
// localFilePath: fully qualified path and file name
async function uploadBlobFromLocalPath(containerClient, blobName, localFilePath){
  
  // Create blob client from container client
  const 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:

// containerClient: ContainerClient object
// blobName: string, includes file extension if provided
// readableStream: Readable stream, for example, a stream returned from fs.createReadStream()
async function uploadBlobFromReadStream(containerClient, blobName, readableStream) {
  
  // Create blob client from container client
  const blockBlobClient = containerClient.getBlockBlobClient(blobName);

  // Upload data to block blob using a readable stream
  await blockBlobClient.uploadStream(readableStream);
}

Caricare un BLOB in blocchi da un buffer

L'esempio seguente carica un BLOB in blocchi da un buffer Node.js:

// containerClient: ContainerClient object
// blobName: string, includes file extension if provided
// buffer: blob contents as a buffer, for example, from fs.readFile()
async function uploadBlobFromBuffer(containerClient, blobName, buffer) {

  // Create blob client from container client
  const 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:

// containerClient: ContainerClient object
// blobName: string, includes file extension if provided
// fileContentsAsString: blob content
async function uploadBlobFromString(containerClient, blobName, fileContentsAsString){
  
  // Create blob client from container client
  const blockBlobClient = containerClient.getBlockBlobClient(blobName);

  await blockBlobClient.upload(fileContentsAsString, fileContentsAsString.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 e 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 durante il caricamento

È possibile configurare le proprietà in BlockBlobParallelUploadOptions per migliorare le prestazioni per le operazioni di trasferimento dei dati. Nella tabella seguente sono elencate 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 Il numero massimo di richieste parallele generate in qualsiasi momento come parte di un singolo trasferimento parallelo.
maxSingleShotSize Se le dimensioni dei dati sono minori o uguali a questo valore, i dati vengono caricati in un'unica partizione anziché suddivisi in blocchi. Se i dati vengono caricati in una volta sola, 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 in questi esempi non sono necessariamente quelli consigliati. Per ottimizzare correttamente questi valori, è necessario considerare le esigenze specifiche dell'app.

// containerClient: ContainerClient object
// blobName: string, includes file extension if provided
// localFilePath: fully qualified path and file name
async function uploadWithTransferOptions(containerClient, blobName, localFilePath) {
  
  // Specify data transfer options
  const uploadOptions = {
    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 = containerClient.getBlockBlobClient(blobName);

  // Upload blob with transfer options
  await blockBlobClient.uploadFile(localFilePath, uploadOptions);
}

Per altre informazioni sull'ottimizzazione delle opzioni di trasferimento dei dati, vedere Ottimizzazione delle prestazioni per caricamenti e download con JavaScript.

Caricare un BLOB in blocchi con tag indice

I tag indice BLOB categorizzano i dati nell'account di archiviazione usando gli attributi di tag chiave-valore. Questi tag vengono indicizzati e esposti automaticamente come indice multidimensionale ricercabile per facilitare la ricerca di dati.

L'esempio seguente carica un BLOB in blocchi con tag di indice impostati usando BlockBlobParallelUploadOptions:

// containerClient: ContainerClient object
// blobName: string, includes file extension if provided
// localFilePath: fully qualified path and file name
async function uploadWithIndexTags(containerClient, blobName, localFilePath) {
  
  // Specify index tags for blob
  const uploadOptions = {
    tags: {
      'Sealed': 'false',
      'Content': 'image',
      'Date': '2022-07-18',
    }
  }

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

  // Upload blob with index tags
  await blockBlobClient.uploadFile(localFilePath, uploadOptions);
}

Impostare il livello di accesso di un BLOB durante il 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:

// containerClient: ContainerClient object
// blobName: string, includes file extension if provided
// localFilePath: fully qualified path and file name
async function uploadWithAccessTier(containerClient, blobName, localFilePath) {
  
  // Specify access tier
  const uploadOptions = {
    // 'Hot', 'Cool', 'Cold', or 'Archive'
    tier: 'Cool',
  }

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

  // Upload blob to cool tier
  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, Cold o 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 tramite la libreria client Archiviazione BLOB di Azure per JavaScript, vedere le risorse seguenti.

Operazioni dell'API REST

Azure SDK per JavaScript contiene librerie basate sull'API REST di Azure che consentono di interagire con le operazioni dell'API REST tramite paradigmi noti di JavaScript. I metodi della libreria client per caricare i BLOB usano le operazioni API REST seguenti:

Esempi di codice

Vedere gli esempi di codice di questo articolo (GitHub):

Risorse della libreria client

Vedi anche

  • Questo articolo fa parte della guida per sviluppatori di Archiviazione BLOB per JavaScript/Typescript. Per altre informazioni, vedere l'elenco completo degli articoli della guida per sviluppatori in Creare l'app JavaScript/Typescript.