如何在 Azure SDK v12 中以并行方式分块上传大文件?

How to upload a large file in chunks with parallelism in Azure SDK v12?

在 Azure SDK v11 中,我们可以选择通过 BlobRequestOptions 指定 ParallelOperationThreadCount。在 Azure SDK v12 中,我看到 BlobClientOptions 没有这个,而 BlockBlobClient(以前在 Azure SDK v11 中是 CloudBlockBlob),在下载方法中只提到了并行性。

我们有三个文件:一个 200MB、一个 150MB 和一个 20MB。对于每个文件,我们希望将文件分成块并并行上传。这是 BlockBlobClient 自动完成的吗?如果可能的话,我们也想对这 3 个文件同时进行这些操作。

使用 Fiddler,我验证了 BlockBlobClient 确实在不需要做任何额外工作的情况下分块上传文件。为了并行处理每个主要文件,我只是为每个文件分配一个任务,将其添加到列表 tasks 并使用 await Task.WhenAll(tasks).

您还可以使用 v12 中的 StorageTransferOptions

示例代码如下:

   BlobServiceClient blobServiceClient = new BlobServiceClient(conn_str);
   BlobContainerClient containerClient= blobServiceClient.GetBlobContainerClient("xxx"); 
   BlobClient blobClient = containerClient.GetBlobClient("xxx");

   //set it here.
   StorageTransferOptions transferOptions = new StorageTransferOptions();
   //transferOptions.MaximumConcurrency or other settings.       

   blobClient.Upload("xxx", transferOptions:transferOptions);

顺便说一句,对于上传大文件,您也可以使用Microsoft Azure Storage Data Movement Library以获得更好的性能。