Set*_*eti 3 azure-storage node.js progress-bar
我有以下代码 - 将文件上传到 Azure-Blob-Storage 非常正常,但是,当我上传文件而不是onProgress多次执行时,我只使用 file.size 值执行(并且总是)一次(因此它正在发送- 缓慢)文件到天蓝色,但进度仅在完成后执行一次。
    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});
我想知道的是这个结果对于这个库来说是否正常(对于从天蓝色下载文件,相同的方法可以正常工作)。
根据我的测试,该方法是一种非并行上传方法,它只是Put Blob向Azure存储服务器发送单个请求。欲了解更多详情,请参阅此处。

所以如果你想onProgress多次执行,我建议你使用方法uploadStream。它使用  Put Block操作和Put Block List操作来上传。欲了解更多详情,请参阅此处
例如
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);
  }
| 归档时间: | 
 | 
| 查看次数: | 3584 次 | 
| 最近记录: |