当前位置: 首页 > 知识库问答 >
问题:

Azure Blob node.js下载Blob文件

栾景胜
2023-03-14

我有Node.js应用程序,前端在Angular中,我需要上传和下载文件到Azure Blob/Azure存储

我已经按照这里给出的说明进行了操作:https://github.com/azure/azure-sdk-for-js/blob/master/sdk/storage/storage-blob/samples/typescript/src/basic.ts

下面是我的代码,它列出了BLOB读到可读流

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

const uuidv1 = require('uuid/v1');

async ListBlob(req,res){
    const blobServiceClient = await BlobServiceClient.fromConnectionString(this.AZURE_STORAGE_CONNECTION_STRING);
    const container = blobServiceClient.getContainerClient('mycontainer');
    const containerClient = await blobServiceClient.getContainerClient(container.containerName);
    let temp = Array();
    // List the blob(s) in the container.
    for await (const blob of containerClient.listBlobsFlat()) {
        temp.push(blob.name);
    }
    const blockBlobClient = containerClient.getBlockBlobClient(temp[2]);
    const downloadBlockBlobResponse = await blockBlobClient.download(0);
    let result = await this.streamToString(downloadBlockBlobResponse.readableStreamBody!);
    res.send(result);

}

async streamToString(readableStream) {
  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);
  });
}

共有1个答案

南宫奇思
2023-03-14

请尝试blockblobclient.downloadtoFile()方法

  const response = await blockBlobClient.downloadToFile("filePath");
 类似资料:
  • 我能够通过Node/Express将文件上传到Azure blob存储,没有任何问题,但我找到了关于如何下载文件的非常少的文档/完整示例。我在教程页面上找到了这个,但是运气不好: 是否有其他人使用node.js/express从Azure blob存储下载文件?您是否使用Azure或其他方法(例如请求)。您能否分享如何从Azure获取文件并将其流式传输到文件夹?

  • 从16:00到16:12,下载有短暂的暂停。停顿之间的间隔是相同的,但长度会增加。在 16:12 时,速度变为 Kb/s,并且永远不会返回到正常值。 下面是进行下载的代码(。NET 4.0): 这些问题的原因可能是什么? 编辑 为了获取统计信息,我使用以下 Stream 实现:

  • 你能帮我从下载中重命名吗?

  • Chrome的Blob存储系统设计文档提到了以下内容。 如果blob的内存空间已满,或者新的blob太大而无法在内存中,那么blob系统将使用磁盘。这可以是将旧的blob分页到磁盘,或者直接将新的太大的blob保存到磁盘。 然而,即使在多次浏览文档之后,我仍然有以下担忧: null https://github.com/eligrey/filesaver.js/#supported-browser

  • 使用Angular 7,我通过发布url文件来调用api,并尝试使用文件保护程序中的“saveAs”函数下载它。文件正在下载,但由于已损坏而无法打开。 我的电话如下: 我试过什么: 切换类型 MIME 应用程序/vnd.openxml格式-office文档.电子表格.工作表 按应用程序/八位字节流 切换响应类型数组缓冲区由 blob 或 blob 作为 json 下面是来自服务的响应标头: 文件存

  • 简要背景:我有一个在Azure Blob存储中存储文件的web服务。该服务的用户可以一次下载多个文件。如果下载的所有文件的总文件大小相对较小,那么我在服务器上压缩文件并返回该压缩文件--这里没有问题。 场景:例如,如果一个用户想要下载3个每个1GB的文件,那么我将这些文件下载到服务器是不现实的,将它们压缩,然后将压缩文件返回到浏览器。因此,对于这些场景,我将Azure Blob Storage U