You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

129 lines
4.7 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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("下载成功");
}
}
}
}