He estado tratando de descargar 5 archivos cargados como blobs que ya están en la nube azul en el contenedor: updateappnew a través de un script de nodejs. Sin embargo, recibo un error como en la imagen No se puede leer la propiedad 'on' de indefinido después de descargar el primer blob de los cinco. Estoy compartiendo mi código aquí y esperaba encontrar dónde está ocurriendo realmente el problema y cómo se puede modificar para descargar todos los blobs uno tras otro.
const { BlobServiceClient } = require('@azure/storage-blob');// Una función auxiliar utilizada para leer un flujo legible de Node.js en una cadena
return new Promise((resolve, reject) => { const chunks = []; readableStream.on("data", (data) => { chunks.push(data.toString()); }); readableStream.on("end", () => { resolve(chunks.join("")); }); readableStream.on("error", reject); }); } async function main() { const AZURE_STORAGE_CONNECTION_STRING = process.env.AZURE_STORAGE_CONNECTION_STRING; console.log('Azure Blob storage v12 - JavaScript quickstart sample'); ``` // Quick start code goes here // Create the BlobServiceClient object which will be used to create a container client ```const blobServiceClient = BlobServiceClient.fromConnectionString(AZURE_STORAGE_CONNECTION_STRING);``` // Create a unique name for the container ```const containerName = 'updateappnew'; console.log('\nFinding Container for updating file...'); console.log('\t', containerName);``` // Get a reference to a container ```const containerClient = blobServiceClient.getContainerClient(containerName); console.log('\nListing blobs...');``` // List the blob(s) in the container. ```for await (const blob of containerClient.listBlobsFlat()) { console.log('\t', blob.name); const blockBlobClient = containerClient.getBlockBlobClient(blob.name); }``` // List blobs ```i = 1; for await (const blob of containerClient.listBlobsFlat()) { console.log(`Blob ${i++}: ${blob.name}`); const blockBlobClient = containerClient.getBlockBlobClient(blob.name); const downloadBlockBlobResponse = await blockBlobClient.downloadToFile(`/home/administrator/file_${i-1}`); console.log('\nDownloaded blob content...'); console.log('\t', await streamToString(downloadBlockBlobResponse.readableStreamBody)); }// En Node.js, obtenga datos descargados accediendo a downloadBlockBlobResponse.readableStreamBody // En navegadores, obtenga datos descargados accediendo a downloadBlockBlobResponse.blobBody
}
main().then(() => console.log('Done')).catch((ex) => console.log(ex.message));
Este error generalmente ocurre cuando el valor al que se accede no existe. asegúrese de verificar el valor dentro de su condición.
A continuación se muestra el código de ejemplo para descargar blobs:
const downloadResponse = await blockBlobURL.download(aborter, 0); const downloadedContent = await streamToString(downloadResponse.readableStreamBody); console.log(`Downloaded blob content: "${downloadedContent}"`);También tenemos un blog en GIT donde tenemos el proyecto completo con pasos