Browse Source

测试复制大文件

Li 2 năm trước cách đây
mục cha
commit
34afc4a558
1 tập tin đã thay đổi với 36 bổ sung0 xóa
  1. 36 0
      TEAMModelBI/Controllers/BITest/TestController.cs

+ 36 - 0
TEAMModelBI/Controllers/BITest/TestController.cs

@@ -52,6 +52,7 @@ using Azure.Storage.Blobs.Models;
 using Azure.Storage.Blobs;
 using Azure.Storage.Blobs.Specialized;
 using System.Web;
+using Azure.Storage.Sas;
 
 namespace TEAMModelBI.Controllers.BITest
 {
@@ -1472,6 +1473,41 @@ namespace TEAMModelBI.Controllers.BITest
             return Ok(new { state = RespondCode.Ok });
         }
 
+        [HttpPost("set-copyfile")]
+        public async Task<IActionResult> SetCopyFile() 
+        {
+
+            List<Task<CopyFromUriOperation>> filelist = new List<Task<CopyFromUriOperation>>();
+            var azureClient = _azureStorage.GetBlobContainerClient($"0-public");//获取容器连接地址
+
+            //查询目录下所有容器路径
+            await foreach (BlobItem blobItem in azureClient.GetBlobsAsync(BlobTraits.None, BlobStates.None, $"TestMP4Max/"))
+            {
+                string newurl = $"{blobItem.Name}".Replace($"/SourceFile/", $"/SourceFiles/");//替换成新的容器路径
+                var urlSas = _azureStorage.GetBlobSAS($"0-public", blobItem.Name, BlobSasPermissions.Read | BlobSasPermissions.List);   //获取容器sas和有效期
+                //await azureClient.GetBlobClient(newurl).StartCopyFromUriAsync(new Uri(urlSas));
+                filelist.Add(azureClient.GetBlobClient(newurl).StartCopyFromUriAsync(new Uri(urlSas)));
+                //await 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<Task<CopyFromUriOperation>> rspBlobCopyInfos = filelist.Skip((i) * 256).Take(256).ToList();
+                    await Task.WhenAll(rspBlobCopyInfos);
+                }
+            }
+
+
+            return Ok(new { state = 200 , filelist });
+        }
+
         public class linqTest
         {
             public string id { get; set; }