using System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; using TEAMModelOS.SDK.DI; using TEAMModelOS.SDK.Models.Cosmos.BI; using Azure.Storage.Blobs.Models; using Azure; using Azure.Storage.Sas; using System.Linq; using Azure.Storage.Blobs.Specialized; namespace TEAMModelOS.SDK.Models.Service { public class BatchCopyFileService { /// /// 执行批量复制操作方法 /// /// /// /// /// public static async Task CopyFile(DingDing _dingDing,AzureStorageFactory _azureStorage, BatchCopyFile batchCopyFile) { try { List>> filelist = new List>>(); var azureClient = _azureStorage.GetBlobContainerClient($"{batchCopyFile.blobCntr}");//获取容器连接地址 //先删除原有的文件 List>> DelList = new List>>(); await foreach (BlobItem blobItem in azureClient.GetBlobsAsync(BlobTraits.None, BlobStates.None, $"yxpt/{batchCopyFile.newFileName}/")) { DelList.Add(azureClient.GetBlobBaseClient(blobItem.Name).DeleteIfExistsAsync()); } if (DelList.Count <= 256) { await Task.WhenAll(DelList); } else { int pages = (DelList.Count + 255) / 256; for (int i = 0; i < pages; i++) { List>> delList = DelList.Skip((i) * 256).Take(256).ToList(); await Task.WhenAll(delList); } } //查询目录下所有容器路径 await foreach (BlobItem blobItem in azureClient.GetBlobsAsync(BlobTraits.None, BlobStates.None, $"yxpt/{batchCopyFile.oldFileName}/")) { string newurl = $"{blobItem.Name}".Replace($"/{batchCopyFile.oldFileName}/", $"/{batchCopyFile.newFileName}/");//替换成新的容器路径 var urlSas = _azureStorage.GetBlobSAS($"{batchCopyFile.blobCntr}", blobItem.Name, BlobSasPermissions.Read | BlobSasPermissions.List); //获取容器sas和有效期 filelist.Add(azureClient.GetBlobClient(newurl).SyncCopyFromUriAsync(new Uri(urlSas))); //添加复制文件到集合执行复制操作 } if (filelist.Count <= 256) { await Task.WhenAll(filelist); } else { int pages = (filelist.Count + 255) / 256; for (int i = 0; i < pages; i++) { List>> rspBlobCopyInfos = filelist.Skip((i) * 256).Take(256).ToList(); await Task.WhenAll(rspBlobCopyInfos); } } return 200; } catch (Exception ex) { await _dingDing.SendBotMsg($"{Environment.GetEnvironmentVariable("Option:Location")}-Batch-CopyFile \n {ex.Message}\n{ex.StackTrace}", GroupNames.醍摩豆服務運維群組); return -1; } } } }