miniohelper

using Minio;
using Minio.DataModel;
using NLog;
using System;
using System.IO;
using System.Security.Cryptography;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WpfImges
{
    /// <summary>
    /// Minio 帮助类
    /// </summary>
    public class MinioHelper : IDisposable
    {
        private static readonly Logger Log = LogManager.GetLogger("MinioHelper");
        private static MinioClient _minioClient;
        /// <summary>
        /// 初始化赋值
        /// </summary>
        /// <param name="endpoint">#Minio地址</param>
        /// <param name="accessKey">Minio账号</param>
        /// <param name="secretKey">Minio密码</param>
        public MinioHelper(string endpoint, string accessKey, string secretKey)
        {
            _minioClient = new MinioClient(endpoint, accessKey, secretKey);
        }
        /// <summary>
        /// 判断桶存不存在
        /// </summary>
        /// <param name="_bucketName">创建的桶名称</param>
        /// <returns></returns>
        public async Task<bool> BucketExistsAsync(string _bucketName)
        {
            try
            {
                return await _minioClient.BucketExistsAsync(_bucketName);
            }
            catch (Exception ex)
            {
                Log.Error(ex.Message);
                return false;
            }

        }
        /// <summary>
        /// 创建Bucket桶
        /// </summary>
        /// <param name="_bucketName">创建的桶名称</param>
        /// <returns></returns>
        public async Task<bool> MakeBucketAsync(string _bucketName)
        {
            try
            {
                await _minioClient.MakeBucketAsync(_bucketName);
                return true;
            }
            catch (Exception ex)
            {
                Log.Error(ex.Message);
                return false;
            }
        }
        /// <summary>
        /// 获取已存在的Buckets
        /// </summary>
        /// <returns></returns>
        public async Task<ListAllMyBucketsResult> ListBucketsAsync()
        {
            try
            {
                return await _minioClient.ListBucketsAsync();
            }
            catch (Exception ex)
            {
                Log.Error(ex.Message);
                return null;
            }

        }
        /// <summary>
        /// 删除桶
        /// </summary>
        /// <param name="_bucketName">创建的桶名称</param>
        /// <returns></returns>
        public async Task RemoveBucketAsync(string _bucketName)
        {
            try
            {
                await _minioClient.RemoveBucketAsync(_bucketName);
            }
            catch (Exception ex)
            {
                Log.Error(ex.Message);

            }
        }
        /// <summary>
        /// 列出存储桶中的所有对象。`
        /// </summary>
        /// <param name="_bucketName">桶名</param>
        /// <param name="_prefix">前缀字符串。列出名称以开头的对象prefix</param>
        /// <param name="_recursive">如果为false,则模拟目录结构,其中返回的每个列表都是完整对象或对象键的一部分,直到第一个“ /”。所有具有相同前缀(直到第一个“ /”)的对象都将合并到一个条目中。默认为false</param>
        /// <returns></returns>
        public async Task<IObservable<Item>> ListObjectsAsync(string _bucketName, string _prefix = null, bool _recursive = true)
        {
            try
            {

                return await Task.Run(() => _minioClient.ListObjectsAsync(_bucketName, _prefix, _recursive));

            }
            catch (Exception ex)
            { 
                Log.Error(ex.Message);
                return null;
            }

        }
        /// <summary>
        /// 将对象下载为流。
        /// </summary>
        /// <param name="_bucketName">桶名</param>
        /// <param name="_objectName">存储桶中的对象名称</param>
        /// <returns></returns>
        public async Task<Stream> GetObjectAsync(string _bucketName, string _objectName)
        {
            Stream _outStream = null;
            try
            {
                await _minioClient.StatObjectAsync(_bucketName, _objectName);
                await _minioClient.GetObjectAsync(_bucketName, _objectName, (stream) =>
                {
                    _outStream = stream;
                });
                return _outStream;
            }
            catch (Exception ex)
            {
                Log.Error(ex.Message);
                return _outStream;
            }
        }
        /// <summary>
        /// 将对象下载并保存为本地文件系统中的文件
        /// </summary>
        /// <param name="_bucketName">桶名</param>
        /// <param name="_objectName">存储桶中的对象名称</param>
        /// <param name="_savepath">保存路径</param>
        /// <returns></returns>
        public async Task GetObjectAsync(string _bucketName, string _objectName, string _savepath)
        {

            try
            {
                await _minioClient.StatObjectAsync(_bucketName, _objectName);
                await _minioClient.GetObjectAsync(_bucketName, _objectName, _savepath + "/" + _objectName);

            }
            catch (Exception ex)
            {
                Log.Error(ex.Message);
            }
        }
        /// <summary>
        /// 将内容从流上传到objectName。
        /// </summary>
        /// <param name="_bucketName">桶名</param>
        /// <param name="objectName">存储桶中的对象名称</param>
        /// <param name="filepath">文件路径+文件全名称</param>
        /// <param name="contentType">文件的内容类型。默认为“应用程序/八位字节流”</param>
        public async Task PutObjectByStreamAsync(string _bucketName, string _objectName, string _filepath, string _contentType)
        {
            try
            {
                byte[] bs = File.ReadAllBytes(_filepath);
                MemoryStream filestream = new MemoryStream(bs);
                Aes aesEncryption = Aes.Create();
                aesEncryption.KeySize = 256;
                aesEncryption.GenerateKey();
                var ssec = new SSEC(aesEncryption.Key);
                await _minioClient.PutObjectAsync(_bucketName, _objectName, filestream, filestream.Length, _contentType, null, ssec);
            }
            catch (Exception ex)
            {
                Log.Error(ex.Message);
            }
        }
        /// <summary>
        /// 将内容从文件上传到objectName
        /// </summary>
        /// <param name="_bucketName">桶名</param>
        /// <param name="objectName">存储桶中的对象名称</param>
        /// <param name="filepath">文件路径+文件全名称</param>
        /// <param name="contentType">文件的内容类型。默认为“应用程序/八位字节流”</param>
        public async Task PutObjectByFileAsync(string _bucketName, string _objectName, string _filepath, string _contentType)
        {
            try
            {
                await _minioClient.PutObjectAsync(_bucketName, _objectName, _filepath, _contentType);
            }
            catch (Exception ex)
            {
                Log.Error(ex.Message);
            }
        }
        /// <summary>
        /// 获取对象的元数据
        /// </summary>
        /// <param name="_bucketName">桶名</param>
        /// <param name="_objectName">存储桶中的对象名称</param>
        /// <returns></returns>
        public async Task<ObjectStat> StatObjectAsync(string _bucketName, string _objectName)
        {
            try
            {
                return await _minioClient.StatObjectAsync(_bucketName, _objectName);
            }
            catch (Exception ex)
            {
                Log.Error(ex.Message);
                return null;
            }
        }
        /// <summary>
        /// 为HTTP GET操作生成一个预签名的URL。即使存储桶是私有的,浏览器/移动客户端也可能指向该URL直接下载对象。该预签名URL可以具有关联的到期时间(以秒为单位),在此时间之后,它将不再起作用。默认有效期设置为7天
        /// </summary>
        /// <param name="_bucketName">桶名</param>
        /// <param name="_objectName">存储桶中的对象名称</param>
        /// <param name="_expiresInt">到期秒数。默认有效期设置为7天</param>
        /// <returns></returns>
        public async Task<string> PresignedGetObjectAsync(string _bucketName, string _objectName, int _expiresInt)
        {
            try
            {
                return await _minioClient.PresignedGetObjectAsync(_bucketName, _objectName, _expiresInt);
            }
            catch (Exception ex)
            {

                Log.Error(ex.Message);
                return null;
            }
        }

        public void Dispose()
        {

        }
    }
}

使用nuget 下载minio和nlog

windows如何使用minio

下载minio.exe

新建run.bat文件,内容如下:

set MINIO_ACCESS_KEY=admin
set MINIO_SECRET_KEY=12345678
minio.exe server D:\minioData

D:\minioData是minio储存目录

运行bat

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值