.NET Core使用minio实现图片上传功能

目录

一. Minio的基本使用 

1. 下载Minio

2. 启动Minio

二. .Net Core中使用minio

1. 下载Nuget包 Minio

2.  配置信息以及注入

3. 图片上传Service层

4. 接口编写


 

        最近在进行一个图片的上传功能实现,我选用的免费的Minio来实现这个功能,具体步骤如下:

一. Minio的基本使用 

1. 下载Minio

https://min.io/download#/agpl-windowsicon-default.png?t=N7T8https://min.io/download#/agpl-windows

2. 启动Minio

前面将Minio下载到自己想要保存的位置,此时文件内会出现一个minio.exe文件

我们在该路径下启动cmd, 输入 minio.exe server 数据存储地址

图片中包含了输出指令,访问地址已经访问账号和密码,我们随便点击一个输入账号密码就可以进入到minio的控制台.

 

二. .Net Core中使用minio

1. 下载Nuget包 Minio

2.  配置信息以及注入

为了方便后期更改,我选择在appsettings.json中进行配置

  // minio配置
  "MinIO": {
    "Endpoint": "127.0.0.1:9000",
    "AccessKey": "minioadmin",
    "SecretKey": "minioadmin"
  }

 注入Minio服务

var minio = builder.Configuration.GetSection("MinIO");
builder.Services.AddSingleton(new MinioClient()
    .WithEndpoint(minio["Endpoint"])
    .WithCredentials(minio["AccessKey"], minio["SecretKey"])
    .Build());

3. 图片上传Service层

/// <summary>
/// 上传图片
/// </summary>
/// <param name="file"></param>
/// <returns></returns>
/// <exception cref="ApplicationException"></exception>
public async Task<string> uploadFile(IFormFile file)
{
    try
    {
        var beArgs = new BucketExistsArgs().WithBucket(bucketName);
        bool found = await _minioClient.BucketExistsAsync(beArgs).ConfigureAwait(false);

        //创建bucket
        if (!found)
        {
            var mbArgs = new MakeBucketArgs().WithBucket(bucketName);
            await _minioClient.MakeBucketAsync(mbArgs).ConfigureAwait(false);
        }

        //获取上传存储地址和文件名
        string fileName = $"{Guid.NewGuid():N}{Path.GetExtension(file.FileName)}";
        string objectName = $"/{DateTime.Now:yyyy/MM/dd}/{fileName}";
        //获取上传文件输入流
        Stream stream = file.OpenReadStream();

        //上传文件
        var putObjectArgs = new PutObjectArgs()
            .WithBucket(bucketName)
            .WithObject(objectName)
            .WithStreamData(stream)
            .WithObjectSize(file.Length)
            .WithContentType(file.ContentType);

        await _minioClient.PutObjectAsync(putObjectArgs).ConfigureAwait(false);

        // 获取文件在minio的路径
        string imageUrl = "http://127.0.0.1:9000/computerclub" + objectName;

        return imageUrl;
    }
    catch (Exception ex)
    {
        // 处理异常
        throw new ApplicationException("文件上传失败", ex);
    }
}

4. 接口编写

[Route("api/[controller]")]
[ApiController]
public class FileUploadsController : ControllerBase
{
    // 桶名
    private static string bucketName = "computerclub";

    private readonly IMInioFileService _service;
    public FileUploadsController(IMInioFileService service)
    {
        _service = service;
    }

    /// <summary>
    /// 上传图片
    /// </summary>
    /// <param name="file"></param>
    /// <returns></returns>
    [HttpPost("fileUpload")]
    public async Task<IActionResult> UploadFile(IFormFile file)
    {
        var result = await _service.uploadFile(file);

        return Ok(result);
    }
}

 此时运行项目上传图片:

上次完成后我们在minio控制台可以看到我们的图片上传成功了,并且在本地的minio的data中保存了相关信息

此时我们可以直接使用图片生成的连接在浏览器直接访问图片

 

到此上传图片的功能就实现啦

  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

.net开发

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

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

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

打赏作者

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

抵扣说明:

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

余额充值