Minio数据下载

csharp 复制代码
/// <summary>
/// Minio的WebHook回调地址
/// </summary>
/// <param name="callbackData"></param>
/// <returns></returns>
[HttpPost]
[AllowAnonymous] // 允许匿名访问此方法
public async Task<IActionResult> CallBack([FromBody] MinioCallback callbackData)
{
    // 1. 验证是否接收到数据
    if (callbackData == null)
    {
        _logger.LogError("未接收到任何数据,可能是JSON格式不匹配");
        return BadRequest("未接收到有效数据");
    }

    // 2. 验证Records是否存在
    if (callbackData.Records == null || !callbackData.Records.Any())
    {
        _logger.LogWarning("数据结构中没有Records数组");
        return Ok(new { Status = "警告", Message = "没有事件记录", Data = callbackData });
    }

    //存储桶
    string _bucketName = callbackData.Records.First().s3.bucket.name;

    //文件名称携带路径
    string _object_path_name = callbackData.Key.replace(_bucketName + "/", "");

    string _file_name = callbackData.Key.split("/").Last();

    string _curr_path = (callbackData.Key.Substring(0, callbackData.Key.LastIndexOf('/') + 1)).replace("/", "\\");

    LogHelper.Info($"回调成功:{_curr_path}\\{_file_name}");
    if (!callbackData.EventName.contains("Delete"))
    {
        var memoryStream = new MemoryStream();
        GetObjectArgs getObjectArgs = new GetObjectArgs()
                                          .WithBucket(_bucketName)
                                          .WithObject(_object_path_name)
                                          .WithCallbackStream((stream) =>
                                          {
                                              stream.CopyTo(memoryStream);
                                          });
        await _client.GetObjectAsync(getObjectArgs);

        DirectoryInfo directoryInfo = new DirectoryInfo(@$"C:\Users\Rick\Desktop\杨大枫测试文件\下载的文件\{_curr_path}");
        if (!directoryInfo.Exists)
        {
            directoryInfo.Create();
        }

        string pathsss = @$"C:\Users\Rick\Desktop\杨大枫测试文件\下载的文件\{_curr_path}\{_file_name}";

        using FileStream targetFileStream = new FileStream(pathsss, FileMode.Create);

        memoryStream.WriteTo(targetFileStream);
        LogHelper.Info($"下载成功:{_curr_path}\\{_file_name}");
    }
    else
    {
        System.IO.File.Delete(@$"C:\Users\Rick\Desktop\杨大枫测试文件\下载的文件\{_curr_path}\{_file_name}");

        _logger.LogInformation($"删除成功:{_curr_path}\\{_file_name}");
        LogHelper.Info($"删除成功:{_curr_path}\\{_file_name}");
    }

    // 5. 返回详细信息便于调试
    return Ok(new { Status = "成功", Message = "数据接收正常", Detail = "" });
}

实体类

csharp 复制代码
 public class MinioCallback
 {
     /// <summary>
     /// 事件名称
     /// </summary>
     public string EventName { get; set; }
     /// <summary>
     /// 详细路径携带文件名字
     /// </summary>
     public string Key { get; set; }
     public List<Records> Records { get; set; }
 }

 public class Records
 {
     //      "eventVersion": "2.0",
     //"eventSource": "minio:s3",
     //"awsRegion": "",
     //"eventTime": "2025-08-20T10:01:06.800Z",
     //"eventName": "s3:ObjectCreated:Put",
     //      "userIdentity": {
     //	"principalId": "root"
     //},
     //      "requestParameters": {
     //	"principalId": "root",
     //	"region": "",
     //	"sourceIPAddress": "127.0.0.1"
     //},
     //      "responseElements": {
     //	"x-amz-id-2": "d0af7ef13e9a79de08686e85c361d9af88c5ebdbbacf07a734ab2c11fd85e57f",
     //	"x-amz-request-id": "185D715B531D4A58",
     //	"x-minio-deployment-id": "1e5f66fc-c3c1-4dfb-8878-70e62fb899cf",
     //	"x-minio-origin-endpoint": "http://127.0.0.1:9005"
     //},
     public S3 s3 { get; set; }
     //      "source": {
     //	"host": "127.0.0.1",
     //	"port": "",
     //	"userAgent": "MinIO (windows; amd64) minio-go/v7.0.91 MinIO Console/(dev)"
     //}
 }

 public class S3
 {
     //      "s3SchemaVersion": "1.0",
     //"configurationId": "Config",
     public Bucket bucket { get; set; }
     public Object @object { get; set; }
 }

 public class Bucket
 {
     /// <summary>
     /// 存储桶名称
     /// </summary>
     public string name { get; set; }

     //    		"ownerIdentity": {
     //	"principalId": "root"
     //},
     //"arn": "arn:aws:s3:::yangdafengceshi"
 }

 public class Object
 {
     /// <summary>
     /// key 对象的键(文件名)
     /// </summary>
     public string key { get; set; }

     /// <summary>
     /// size 对象大小(单位:字节)
     /// </summary>
     public long size { get; set; }

     /// <summary>
     /// eTag 实体标签(用于验证对象完整性)
     /// </summary>
     public string eTag { get; set; }

     /// <summary>
     /// contentType 内容类型(文件的MIME类型)
     /// </summary>
     public string contentType { get; set; }
     /// <summary>
     /// sequencer 序列号(用于标识对象操作的顺序)
     /// </summary>
     public string sequencer { get; set; }
 }

注入

csharp 复制代码
#region minio客户端注入
IMinioClient minioClient = new MinioClient()
                    .WithEndpoint("127.0.0.1:9005")
                    .WithCredentials("4TG1F2UV131LB8RMETLC", "D21QN7IZf7IUNuTJvRe07GsFMnCgYPt5BSFFTNQA")
                    //.WithSSL()
                    .Build();
builder.Services.AddSingleton<IMinioClient>(minioClient);

#endregion


        private readonly UserService _UserService;//
        private readonly ILogger<UserController> _logger;
        private readonly JwtHelper _jwtHelper;
        private readonly IMinioClient _client;
        public UserController(UserService UserService, IMinioClient client,
            ILogger<UserController> logger,
             JwtHelper jwtHelper)
        {

            _UserService = UserService;
            _logger = logger;
            _jwtHelper = jwtHelper;
            _client = client;
        }
相关推荐
deriva1 天前
windows系统安装linux并docker部署.netcore项目
linux·docker·.netcore
温暖的苹果2 天前
【.Net runtime】coreclr(.Net应用启动过程)
c#·.net·.netcore
AI题库3 天前
1.3 ABP MVC开发环境搭建指南:从零开始快速上手
asp.net·mvc·.net·.netcore
时光追逐者5 天前
ASP.NET Core 依赖注入的三种服务生命周期
后端·c#·asp.net·.net·.netcore
武藤一雄5 天前
C# 中线程安全都有哪些
后端·安全·微软·c#·.net·.netcore·线程
csdn_aspnet5 天前
.NET 8 Web 应用、Web API 和 RabbitMQ
rabbitmq·.netcore·.net8
温暖的苹果6 天前
【.Net runtime】corehost(.NET 应用启动过程)
c#·.net·.netcore
csdn_aspnet6 天前
使用 Windows 客户端的 RabbitMQ Messaging for .NET 8 Web API 第 2 部分
windows·rabbitmq·.netcore·.net8
csdn_aspnet6 天前
使用 Windows 客户端的 RabbitMQ Messaging for .NET 8 Web API 第 1 部分
rabbitmq·.net·.netcore·.net8