using System.Threading.Tasks; using Azure.Storage; using Azure.Storage.Blobs; using Azure.Storage.Blobs.Models; using TEAMModelOS.SDK.Module.AzureBlob.Configuration; using TEAMModelOS.SDK.Module.AzureBlob.Container; using TEAMModelOS.SDK.Context.Constant; using TEAMModelOS.SDK.Helper.Security.ShaHash; using System; using System.IO; namespace TEAMModelOS.SDK.DI { public static class AzureStorageBlobExtensions { /// /// 取得指定前置詞的 Blob 名稱的總大小(Bytes),例如指定目錄名稱為前置詞 /// /// 篩選開頭名稱,Null代表容器總大小 /// 總大小(Bytes),如果為Null代表查無前置詞或者發生錯誤 public static async Task GetBlobsSize(this BlobContainerClient client, string prefix = null) { long? size = 0; try { await foreach (var item in client.GetBlobsAsync(BlobTraits.None, BlobStates.None, prefix)) { size += item.Properties.ContentLength; }; return size; } catch { return null; } } /// /// 系统管理员 资源,题目关联,htex关联,学习活动学生上传文件关联,基本信息关联,教室平面图关联,评测冷数据关联 /// "system": [ "res", "item", "htex", "task", "info", "room", "exam" ], /// 资源,题目关联,htex关联,学习活动学生上传文件关联,基本信息关联,教室平面图关联,评测冷数据关联 /// "school": [ "res", "item", "htex", "task", "info", "room", "exam" ], /// 资源,题目关联,htex关联,学习活动关联,教师基本信息关联 /// "teacher": [ "res", "item", "htex", "task", "info" ], /// 答案及学习活动上传的文件,学生基本信息关联 ///"student": [ "stu/{studentId}/ans", "stu/{studentId}/task" ] /// /// 容器名称 /// 文件内容的流 /// 业务文件夹 /// 文件名 /// 是否存放文件后缀对应的contentType /// public static async Task UploadFileByContainer(this AzureStorageFactory azureStorageFactory, string name, string text, string folder, string fileName, bool contentTypeDefault = true) { // string groupName =folder; BlobContainerClient blobContainer = azureStorageFactory.GetBlobContainerClient(name.ToLower().Replace("#", "")); //blobClient.GetContainerReference(groupName); Uri url = blobContainer.Uri; var blockBlob = blobContainer.GetBlobClient(folder + "/" + fileName); string fileext = fileName.Substring(fileName.LastIndexOf(".") > 0 ? fileName.LastIndexOf(".") : 0); string content_type = "application/octet-stream"; if (!contentTypeDefault) { ContentTypeDict.dict.TryGetValue(fileext, out string contenttype); if (!string.IsNullOrEmpty(contenttype)) { content_type = contenttype; } else { //blockBlob.Properties.ContentType = content_type; } } else { //blockBlob.Properties.ContentType = content_type; } byte[] bytes = System.Text.Encoding.Default.GetBytes(text); Stream streamBlob= new MemoryStream(bytes); await blockBlob.UploadAsync(streamBlob,true); blockBlob.SetHttpHeaders(new BlobHttpHeaders { ContentType = content_type }); AzureBlobModel model = new AzureBlobModel(fileName, name, folder, fileName, folder, content_type, bytes.Length) { Sha1Code = ShaHashHelper.GetSHA1(bytes), BlobUrl = blockBlob.Uri.ToString() }; return model; } } }