using Bunny.Common;
using Bunny.Common.Connect;
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)
);
}
}