Procházet zdrojové kódy

复制试卷到另外一个学校

Li před 2 roky
rodič
revize
947459d0cc
1 změnil soubory, kde provedl 52 přidání a 35 odebrání
  1. 52 35
      TEAMModelBI/Controllers/Census/PaperController.cs

+ 52 - 35
TEAMModelBI/Controllers/Census/PaperController.cs

@@ -11,6 +11,7 @@ using System;
 using System.Collections.Generic;
 using System.Globalization;
 using System.IO;
+using System.Linq;
 using System.Text;
 using System.Text.Json;
 using System.Threading.Tasks;
@@ -154,45 +155,61 @@ namespace TEAMModelBI.Controllers.Census
                 List<Task<CopyFromUriOperation>> filelist = new();   //可复制256M以上文件
                 await foreach (BlobItem blobItem in oldBobCilent.GetBlobsAsync(BlobTraits.None, BlobStates.None, blobUrl))
                 {
-                    if (blobItem.Name.EndsWith(".json"))
+                    var urlSas = _azureStorage.GetBlobSAS($"{cItem.oldSc}", blobItem.Name, BlobSasPermissions.Read | BlobSasPermissions.List);   //获取容器sas和有效期
+                    filelist.Add(newBobCilent.GetBlobClient(blobItem.Name).StartCopyFromUriAsync(new Uri(urlSas)));
+                    ////序列化数据修改数据
+                    //if (blobItem.Name.EndsWith(".json"))
+                    //{
+                    //    BlobClient tempClient = oldBobCilent.GetBlobClient(blobItem.Name);
+                    //    using (var meomoryStream = new MemoryStream())
+                    //    {
+                    //        StringBuilder itemStr = new();
+                    //        BlobClient tempBlobClient = oldBobCilent.GetBlobClient(blobItem.Name);
+                    //        BlobDownloadInfo download = tempBlobClient.Download();
+                    //        var content = download.Content;
+                    //        string text;
+                    //        using (var streamReader = new StreamReader(content))
+                    //        {
+                    //            while ((text = streamReader.ReadLine()) != null)
+                    //            {
+                    //                if (streamReader.EndOfStream)
+                    //                    itemStr.Append($"{text.ToString()}");
+                    //                else
+                    //                    itemStr.Append($"{text.ToString()},");
+                    //            }
+                    //            streamReader.Close();
+                    //        }
+                    //        string input = itemStr.ToString();
+                    //        BlobItemInfo blobbItemInfo = input.ToObject<BlobItemInfo>();
+
+                    //        //var response = oldBobCilent.GetBlobClient($"{blobItem.Name}").DownloadTo(meomoryStream);
+                    //        //BlobItemInfo blobbItemInfo = Encoding.UTF8.GetString(meomoryStream.ToArray()).ToString().ToObject<BlobItemInfo>();
+                    //        blobbItemInfo.exercise.periodId = cItem.newPrdId;
+                    //        blobbItemInfo.exercise.gradeIds = cItem.newGrId;
+
+                    //        blobbItemInfo.exercise.subjectId = cItem.newSubId;
+
+                    //        var urlSas = _azureStorage.GetBlobSAS($"{cItem.newSc}", blobItem.Name, BlobSasPermissions.Read | BlobSasPermissions.List);   //获取容器sas和有效期
+
+                    //        var ster = newBobCilent.UploadFileByContainer(blobbItemInfo.ToJsonString(), blobItem.Name, blobbItemInfo.id);
+                    //    }
+                    //}
+                }
+                if (filelist.Count <= 256)
+                {
+                    await Task.WhenAll(filelist);
+                }
+                else
+                {
+                    int pages = (filelist.Count + 255) / 256;
+                    for (int i = 0; i < pages; i++)
                     {
-                        BlobClient tempClient = oldBobCilent.GetBlobClient(blobItem.Name);
-                        using (var meomoryStream = new MemoryStream())
-                        {
-                            StringBuilder itemStr = new();
-                            BlobClient tempBlobClient = oldBobCilent.GetBlobClient(blobItem.Name);
-                            BlobDownloadInfo download = tempBlobClient.Download();
-                            var content = download.Content;
-                            string text;
-                            using (var streamReader = new StreamReader(content))
-                            {
-                                while ((text = streamReader.ReadLine()) != null)
-                                {
-                                    if (streamReader.EndOfStream)
-                                        itemStr.Append($"{text.ToString()}");
-                                    else
-                                        itemStr.Append($"{text.ToString()},");
-                                }
-                                streamReader.Close();
-                            }
-                            string input = itemStr.ToString();
-                            BlobItemInfo blobbItemInfo = input.ToObject<BlobItemInfo>();
-
-                            //var response = oldBobCilent.GetBlobClient($"{blobItem.Name}").DownloadTo(meomoryStream);
-                            //BlobItemInfo blobbItemInfo = Encoding.UTF8.GetString(meomoryStream.ToArray()).ToString().ToObject<BlobItemInfo>();
-                            blobbItemInfo.exercise.periodId = cItem.newPrdId;
-                            blobbItemInfo.exercise.gradeIds = cItem.newGrId;
-
-                            blobbItemInfo.exercise.subjectId = cItem.newSubId;
-
-                            var urlSas = _azureStorage.GetBlobSAS($"{cItem.newSc}", blobItem.Name, BlobSasPermissions.Read | BlobSasPermissions.List);   //获取容器sas和有效期
-
-                            var ster = newBobCilent.UploadFileByContainer(blobbItemInfo.ToJsonString(), blobItem.Name, blobbItemInfo.id);
-                        }
+                        List<Task<CopyFromUriOperation>> rspBlobCopyInfos = filelist.Skip((i) * 256).Take(256).ToList(); //可复制256M以上文件
+                        //List<Task<Response<BlobCopyInfo>>> rspBlobCopyInfos = filelist.Skip((i) * 256).Take(256).ToList(); //复制256M以下文件
+                        await Task.WhenAll(rspBlobCopyInfos);
                     }
                 }
 
-
             }
             return Ok(new { state = RespondCode.Ok});
         }