.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 源码及参考资料
源码地址:暂未上传,需要请留言