winforms-minio/TestMinio/test2/MinioFileManager.cs
2023-08-11 10:22:10 +08:00

129 lines
4.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Minio;
using Minio.DataModel;
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection.Emit;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Net.WebRequestMethods;
namespace test2
{
class MinioFileManager
{
private static string endpoint = "10.40.18.12:9000";
private static string accessKey = "root";
private static string secretKey = "root_password";
private static string bucketName = "hbl";
private static string url = $"http://{endpoint}/hbl";
private static MinioClient minioClient=new MinioClient().WithEndpoint(endpoint)
.WithCredentials(accessKey, secretKey)
.Build();
// Initialize the client with access credentials.
private static string getObjectNameByUrl(String input) {
if (input.StartsWith(url))
{
string desiredContent = input.Substring(url.Length);
return desiredContent;
}
else
{
return input;
}
}
public static async Task<String> UploadFileAsync(string filePath,string objectName=null)
{
if (!await minioClient.BucketExistsAsync(new BucketExistsArgs()
.WithBucket(bucketName)))
{
await minioClient.MakeBucketAsync(new MakeBucketArgs()
.WithBucket(bucketName));
}
if (objectName == null) objectName = System.IO.Path.GetFileName(filePath);
objectName = $"{DateTime.Now.ToString("yyyy-MM-dd")}/{objectName}";
var putObjectArgs = new PutObjectArgs()
.WithBucket(bucketName)
.WithObject(objectName)
.WithFileName(filePath);
await minioClient.PutObjectAsync(putObjectArgs);
return $"{url}/{objectName}";
}
public static async Task DeleteFileAsync(string inputUrl)
{
await minioClient.RemoveObjectAsync(new RemoveObjectArgs()
.WithBucket(bucketName).WithObject(getObjectNameByUrl(inputUrl)));
}
/// <summary>列出存储桶里的对象
/// 列出存储桶里的对象
/// </summary>
/// <param name="minio">连接实例</param>
/// <param name="bucketName">存储桶名称</param>
/// <param name="prefix">对象的前缀</param>
/// <param name="recursive">true代表递归查找false代表类似文件夹查找以'/'分隔,不查子文件夹</param>
public static IObservable<Item> ListObjects(Action<Item> action,string prefix = null, bool recursive = true)
{
try
{
ListObjectsArgs args = new ListObjectsArgs()
.WithBucket(bucketName)
.WithPrefix(prefix)
.WithRecursive(recursive);
IObservable<Item> observable = minioClient.ListObjectsAsync(args);
var subscription = observable.Subscribe(new MyObserver(action));
return observable;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}
class MyObserver : IObserver<Item>
{
private Action<Item> action;
public MyObserver(Action<Item> action) {
this.action = action;
}
public void OnCompleted()
{
Console.WriteLine("Completed");
}
public void OnError(Exception error)
{
Console.WriteLine("Error: " + error.Message);
}
public void OnNext(Item value)
{
action(value);
Console.WriteLine("Next: " + value.Key);
}
}
public static async Task DownloadFileAsync(string objectName)
{
var saveFileDialog = new SaveFileDialog();
string fileExtension = Path.GetExtension(objectName);
saveFileDialog.FileName = $"{DateTime.Now.ToString("yyyyMMddHHmmss")}"+ fileExtension;
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
saveFileDialog.Filter = "All Files (*.*)|*.*";
var stat = await minioClient.GetObjectAsync(new GetObjectArgs()
.WithBucket(bucketName)
.WithObject(getObjectNameByUrl(objectName))
.WithFile(saveFileDialog.FileName));
MessageBox.Show("下载成功");
}
}
}
}