无法从 Azure IOT 中心下载容器中的所有 Blob,并收到错误:无法读取未定义的属性"on"



我一直在尝试通过nodejs脚本下载5个已经在azure云中作为Blob上传的文件:updateappnew。然而,我在图像中遇到了错误。在下载了五个的第一个blob之后,无法读取未定义的属性"on"。我在这里分享我的代码,并一直希望找到问题实际发生的地方,以及如何修改它以一个接一个地下载所有Blob。

const { BlobServiceClient } = require('@azure/storage-blob');

//一个助手函数,用于将Node.js可读流读取为字符串

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


}

//在Node.js中,访问downloadBlockBlobResponse.readableStreamBody获取下载数据//在浏览器中,通过访问downloadBlockBlobResponse.blobBody 获取下载的数据

}

main().then(() => console.log('Done')).catch((ex) => console.log(ex.message));

当访问的值不存在时,通常会发生此错误。请确保在其条件下检查该值。

以下是下载Blob的示例代码:

const downloadResponse = await blockBlobURL.download(aborter, 0);
const downloadedContent = await streamToString(downloadResponse.readableStreamBody);
console.log(`Downloaded blob content: "${downloadedContent}"`);

此外,我们在GIT有一个博客,在那里我们有完整的项目与步骤

最新更新