using Bunny.Common; using Bunny.Common.Context; using Microsoft.AspNetCore.Http; using Minio; using Minio.DataModel; using Minio.DataModel.Args; using Minio.DataModel.Result; namespace Bunny.Service.IService.Service; public class MinioService : IMinioService { private readonly IMinioClient _minioContext = MinioContext.MinioClient!; /// /// 上传文件 /// /// 文件内容 /// public async void SaveMinioFile(IFormFile? file, string filepath) { if (file == null) { Console.WriteLine("文件未上传"); return; } var fileName = file.FileName; var contentType = file.ContentType; await _minioContext.PutObjectAsync(new PutObjectArgs() .WithBucket(MinioContext.BucketName) .WithObject($"{filepath}/{fileName}") .WithStreamData(file.OpenReadStream()) .WithContentType(contentType) .WithObjectSize(file.Length) ); } /// /// 查询所有的桶 /// /// 桶列表 public ListAllMyBucketsResult GetAllMyBuckets() { return _minioContext.ListBucketsAsync().Result; } /// /// 获取文件信息 /// /// 文件名 /// 桶名称 /// ObjectStat public ObjectStat GetObjectStat(string filename, string bucketName) { var objectAsync = _minioContext.GetObjectAsync(new GetObjectArgs() .WithBucket(bucketName) .WithObject(filename) .WithFile(filename) ).Result; return objectAsync; } /// /// 获取文件路径 /// /// 文件名 /// 桶名称 /// 文件地址 public string GetObjectPath(string filename, string bucketName) { var url = AppSettings.GetConfig("Minio:Url"); return $"{url}/{bucketName}/{filename}"; } /// /// 下载文件 /// /// 文件名 /// 桶名称 /// 下载文件 public async Task DownloadObject(string filename, string bucketName) { var url = AppSettings.GetConfig("Minio:Url"); var downloadUrl = $"http://{url}/{bucketName}/{filename}"; using var client = new HttpClient(); var responseMessage = await client.GetAsync(downloadUrl); if (!responseMessage.IsSuccessStatusCode) return []; var buffer = await responseMessage.Content.ReadAsByteArrayAsync(); return buffer; } public IAsyncEnumerable ListObject(string? filepath, string bucketName) { return _minioContext .ListObjectsEnumAsync( new ListObjectsArgs() .WithBucket(bucketName) .WithPrefix(filepath) .WithVersions(false) .WithRecursive(true) ); } }