using Aliyun.OSS; using Microsoft.AspNetCore.Http; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using VOL.Core.Configuration; namespace VOL.Core.Utilities { /// /// 阿里云Oss /// public class ALiYunOss { /// /// 上传 /// /// 是否包含文件后缀名 /// public static string Upload(IFormFile file, string filePath, string fileName, bool isIncludeExtension = false) { if (file == null || file.Length == 0) { throw new ArgumentNullException("上传文件为空"); } var url = string.Empty; if (!isIncludeExtension) { // 拼接文件后缀名 var extension = Path.GetExtension(file.FileName); filePath += fileName + extension; } else { filePath += fileName; } var stream = new MemoryStream(); file.CopyTo(stream); stream.Position = 0; // 创建OSSClient实例 var client = new OssClient( AppSetting.ALiYunOSS.Endpoint, AppSetting.ALiYunOSS.AccessKeyId, AppSetting.ALiYunOSS.SecretAccessKey); try { // 上传文件 var result = client.PutObject(AppSetting.YueDongServerOSS.BucketName, filePath, stream); var uri = client.GeneratePresignedUri(AppSetting.YueDongServerOSS.BucketName, filePath); url = "https://" + uri.Host + uri.LocalPath; if (result.HttpStatusCode != HttpStatusCode.OK) throw new Exception("上传失败"); } catch (Exception ex) { throw new Exception("上传失败!"); } finally { stream.Dispose(); } return url; } /// /// 获取指定前缀目录下的所有文件列表 /// /// 目录前缀,例如"student/" /// 文件键列表 public static Dictionary GetFileFromOss(string prefix) { var client = new OssClient( AppSetting.ALiYunOSS.Endpoint, AppSetting.ALiYunOSS.AccessKeyId, AppSetting.ALiYunOSS.SecretAccessKey); var listObjectsRequest = new ListObjectsRequest(AppSetting.YueDongServerOSS.BucketName) { Prefix = prefix }; var result = client.ListObjects(listObjectsRequest); Dictionary imageDataDict = new Dictionary(); foreach (var obj in result.ObjectSummaries) { // Fetch the object data from OSS var objectData = client.GetObject(AppSetting.YueDongServerOSS.BucketName, obj.Key); using (var memoryStream = new MemoryStream()) { objectData.Content.CopyTo(memoryStream); byte[] imageBytes = memoryStream.ToArray(); string base64Image = Convert.ToBase64String(imageBytes); imageDataDict.Add(obj.Key, base64Image); // Store the file name and base64 data } } return imageDataDict; } /// /// 根据前缀删除指定路径下的所有文件 /// /// 目录前缀,例如"student/" public static void DeleteFilesByPrefix(string prefix) { var client = new OssClient( AppSetting.ALiYunOSS.Endpoint, AppSetting.ALiYunOSS.AccessKeyId, AppSetting.ALiYunOSS.SecretAccessKey); // 列出指定前缀的所有文件 var listObjectsRequest = new ListObjectsRequest(AppSetting.YueDongServerOSS.BucketName) { Prefix = prefix }; var result = client.ListObjects(listObjectsRequest); // 如果没有找到文件,直接返回 if (result.ObjectSummaries.Count() == 0) { return; } // 删除所有文件 foreach (var obj in result.ObjectSummaries) { try { // 删除文件 client.DeleteObject(AppSetting.YueDongServerOSS.BucketName, obj.Key); } catch (Exception ex) { throw new Exception("删除失败!"); } } } } }