Node.js Azure Blob存储-上载有进度的文件

Node.js Azure Blob存储-上载有进度的文件,node.js,progress-bar,azure-storage,Node.js,Progress Bar,Azure Storage,我有以下代码-将文件上载到Azure Blob存储非常正常,但是,当我上载文件而不是多次执行onProgress时,我只使用file.size值将其执行一次(并且始终执行一次)(因此它正在缓慢地发送)文件到Azure,但progress仅在完成后执行一次 const requestOptions=this.mergeWithDefaultOptions(perRequestOptions); const client=this.getRequestClient(requestOptions);

我有以下代码-将文件上载到Azure Blob存储非常正常,但是,当我上载文件而不是多次执行
onProgress
时,我只使用file.size值将其执行一次(并且始终执行一次)(因此它正在缓慢地发送)文件到Azure,但progress仅在完成后执行一次

const requestOptions=this.mergeWithDefaultOptions(perRequestOptions);
const client=this.getRequestClient(requestOptions);
const containerClient=await client.getContainerClient(this.options.containerName);
const blobClient=await containerClient.getBlockBlobClient(file.name);
const uploadStatus=await blobClient.upload(file.buffer,file.size,{onProgress:progressCallBack});

我想知道的是,这个库的结果是否正常(对于从azure下载文件,相同的方法可以正常工作)。

根据我的测试,该方法是一种非并行上载方法,它只向azure Storage server发送一个请求。有关更多详细信息,请参阅。

因此,如果您希望多次执行
onProgress
,我建议您使用
uploadStream
方法。它使用operation和operation来上传。有关详细信息,请参阅

比如说

try {
    var creds = new StorageSharedKeyCredential(accountName, accountKey);
    var blobServiceClient = new BlobServiceClient(
      `https://${accountName}.blob.core.windows.net`,
      creds
    );
    var containerClient = blobServiceClient.getContainerClient("upload");
    var blob = containerClient.getBlockBlobClient(
      "spark-3.0.1-bin-hadoop3.2.tgz"
    );

    var maxConcurrency = 20; // max uploading concurrency
    var blockSize = 4 * 1024 * 1024; // the block size in the uploaded block blob
    var res = await blob.uploadStream(
      fs.createReadStream("d:/spark-3.0.1-bin-hadoop3.2.tgz", {
        highWaterMark: blockSize,
      }),
      blockSize,
      maxConcurrency,
      { onProgress: (ev) => console.log(ev) }
    );
    console.log(res._response.status);
  } catch (error) {
    console.log(error);
  }

我也这么认为,但是我不明白为什么你需要在一次执行的函数中执行
onProgress
。我将此设置为答案,因为它证实了我的想法。谢谢@Seti因为它对你很有用,你能接受它作为一个答案吗: