.NET 操作 Minio (二)代码实现

本文介绍了如何在.NET中使用Minio库创建客户端,包括上传文件、查询存储桶对象列表、下载文件以及删除文件的操作,提供了相应的代码示例和参考资料链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

.NET 操作 Minio

在这里插入图片描述

1 创建Minio客户端

private static IMinioClient _minio;
public static IMinioClient GetMinioClient()
{
    return _minio ??= _minio = new MinioClient()
        .WithCredentials(accessKey: "9qI0W0a7TmG46iJyvWUv",
            secretKey: "fhOXNS1QPgByZpnbT7q5VMbKtF7bU0DMGGRXMmBF")
        .WithEndpoint("127.0.0.1:9005")
        .Build();
}

2 上传文件

public static async Task UploadFile(IMinioClient minio,
    string bucketName, string filePath)
{
    var objectName = Path.GetFileName(filePath);
    var contentType = "application/file";
    try
    {
        var beArgs = new BucketExistsArgs()
            .WithBucket(bucketName);
        ConsoleUtil.Info($"查询存储桶 {bucketName} ...");
        bool found = await minio.BucketExistsAsync(beArgs).ConfigureAwait(false);
        if (!found)
        {
            ConsoleUtil.Info($"{bucketName} 存储桶不存在,创建存储桶...");
            var mbArgs = new MakeBucketArgs()
                .WithBucket(bucketName);
            await minio.MakeBucketAsync(mbArgs).ConfigureAwait(false);
        }
        var putObjectArgs = new PutObjectArgs()
            .WithBucket(bucketName)
            .WithObject(objectName)
            .WithFileName(filePath)
            .WithContentType(contentType);
        ConsoleUtil.Info($"文件上传 - {filePath} ...");
        PutObjectResponse putObjectResponse = await minio.PutObjectAsync(putObjectArgs).ConfigureAwait(false);
        ConsoleUtil.Info($"文件上传成功 - 【{objectName}】");
    }
    catch (MinioException e)
    {
        ConsoleUtil.Error($"文件上传失败: {e.Message}");
    }
}

3 查询存储桶对象列表

public static async Task<List<FileItem>> GetFileItems(IMinioClient minio,
    string bucketName, bool recursive = false)
{
    List<FileItem> list = new List<FileItem>();
    try
    {
        bool complate = false;
        var listArgs = new ListObjectsArgs()
            .WithBucket(bucketName)
            .WithRecursive(recursive);
        ConsoleUtil.Info($"查询存储桶 {bucketName} ...");
        var observable = minio.ListObjectsAsync(listArgs);
        var subscription = observable.Subscribe(
            item => list.Add(new FileItem
            {
                FileName = item.Key
            }),
            ex => Debug.WriteLine($"OnError: {ex}"),
            () => complate = true);
        while (!complate)
        {
            await Task.Delay(100);
        }
        ConsoleUtil.Info($"查询存储桶 {bucketName} 对象列表成功!");
    }
    catch (Exception e)
    {
        ConsoleUtil.Error($"查询存储桶 {bucketName} 对象列表失败 - {e.Message}");
    }
    return list;
}

4 下载文件

public static async Task DownloadFile(IMinioClient minio,
    string bucketName, string objectName, string savePath,
    IServerSideEncryption sse = null)
{
    try
    {
        string fileName = Path.Combine(savePath, objectName);
        ConsoleUtil.Info($"下载存储桶 {bucketName} 对象 {objectName} ...");
        File.Delete(fileName);
        var args = new GetObjectArgs()
            .WithBucket(bucketName)
            .WithObject(objectName)
            .WithFile(fileName)
            .WithServerSideEncryption(sse);
        _ = await minio.GetObjectAsync(args).ConfigureAwait(false);
        ConsoleUtil.Info($"下载存储桶 {bucketName} 对象 {objectName} 成功 - {fileName}");
    }
    catch (Exception e)
    {
        ConsoleUtil.Error($"下载存储桶 {bucketName} 对象 {objectName} 失败 - {e.Message}");
    }
}

5 删除文件

public static async Task RemoveFile(IMinioClient minio,
    string bucketName, string objectName, string versionId = null)
{
    try
    {
        var args = new RemoveObjectArgs()
            .WithBucket(bucketName)
            .WithObject(objectName);
        var versions = "";
        if (!string.IsNullOrEmpty(versionId))
        {
            args = args.WithVersionId(versionId);
            versions = ",版本ID " + versionId + " ";
        }

        ConsoleUtil.Info($"删除存储桶 {bucketName} 对象 {objectName} ...");
        await minio.RemoveObjectAsync(args).ConfigureAwait(false);
        ConsoleUtil.Info($"删除存储桶 {bucketName} 对象 {objectName}{versions}成功!");
    }
    catch (Exception e)
    {
        ConsoleUtil.Info($"删除存储桶 {bucketName} 对象 {objectName} 失败 - {e.Message}");
    }
}

6 源码及参考资料

源码地址:暂未上传,需要请留言

参考资料:.NET快速指南 — MinIO中文文档 | MinIO Linux中文文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Winemonk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值