首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure Blob存储-随进度上载文件

Azure Blob存储-随进度上载文件
EN

Stack Overflow用户
提问于 2020-11-19 19:26:19
回答 1查看 635关注 0票数 1

我有以下代码-上传文件到Azure-Blob-Storage是很正常的,但是,当我上传文件而不是多次执行onProgress时,我只使用file.size值执行(并且总是)一次(所以它正在缓慢地发送)文件到azure,但是进度只在完成时执行一次。

代码语言:javascript
复制
    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下载文件,同样的方法也可以正常工作)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-20 14:39:18

根据我的测试,该方法是一种非并行上传方法,它只向Azure Storage服务器发送单个Put Blob请求。更多详情,请参考here

因此,如果您希望多次执行onProgress,我建议您使用uploadStream方法。上传使用Put Block操作和Put Block List操作。有关更多详细信息,请访问here

例如

代码语言:javascript
复制
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);
  }

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64910728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档