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.

201 lines
7.2 KiB
C#

using System;
using System.IO;
using System.Threading.Tasks;
using System.Windows.Forms;
using Minio;
using Minio.DataModel;
using Minio.Exceptions;
using test2;
using static System.Net.Mime.MediaTypeNames;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace TestMinio
{
public partial class Form1 : Form
{
static string endpoint = "10.40.18.12:9000";
static string accessKey = "root";
static string secretKey = "root_password";
// Initialize the client with access credentials.
private static MinioClient minio = new MinioClient()
.WithEndpoint(endpoint)
.WithCredentials(accessKey, secretKey)
.Build();
// Create an async task for listing buckets.
public Form1()
{
InitializeComponent();
}
private async void button1_Click(object sender, EventArgs e)
{
// Create an async task for listing buckets.
var getListBucketsTask = await minio.ListBucketsAsync().ConfigureAwait(true);
// Iterate over the list of buckets.
foreach (var bucket in getListBucketsTask.Buckets)
{
Console.WriteLine($"{bucket.Name} {bucket.CreationDateDateTime} \n");
}
using (OpenFileDialog openFileDialog = new OpenFileDialog())
{
// 设置文件对话框的标题
openFileDialog.Title = "选择要上传的文件";
// 设置文件对话框允许选择的文件类型(例如:图片、文本文件等)
openFileDialog.Filter = "All Files (*.*)|*.*";
// 设置是否允许选择多个文件
openFileDialog.Multiselect = false;
// 打开文件对话框,并等待用户选择文件
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
// 获取选择的文件路径并显示在 TextBox 中
label1.Text = openFileDialog.FileName;
// Run(openFileDialog.FileName);
await MinioFileManager.UploadFileAsync(openFileDialog.FileName);
loadBucket();
}
}
}
private async Task<String> Run(String filePath)
{
var bucketName = $"hbl";
var objectName = System.IO.Path.GetFileName(filePath);
var contentType = "application/zip";
try
{
// Make a bucket on the server, if not already present.
var beArgs = new BucketExistsArgs()
.WithBucket(bucketName);
bool found = await minio.BucketExistsAsync(beArgs).ConfigureAwait(false);
if (!found)
{
var mbArgs = new MakeBucketArgs()
.WithBucket(bucketName);
await minio.MakeBucketAsync(mbArgs).ConfigureAwait(false);
}
// Upload a file to bucket.
var putObjectArgs = new PutObjectArgs()
.WithBucket(bucketName)
.WithObject($"{DateTime.Now.ToString("yyyy-MM-dd")}/{objectName}")
.WithFileName(filePath);
await minio.PutObjectAsync(putObjectArgs).ConfigureAwait(false);
Console.WriteLine("Successfully uploaded " + objectName);
var url =$"http://{endpoint}/hbl/{DateTime.Now.ToString("yyyy-MM-dd")}/{objectName}";
MessageBox.Show(url);
Console.WriteLine(url);
return url;
}
catch (MinioException e)
{
Console.WriteLine("File Upload Error: {0}", e.Message);
}
return $"上传失败";
}
private async void button2_Click(object sender, EventArgs e)
{
var val= getNodeVal();
if (val == null) return;
await MinioFileManager.DownloadFileAsync(val);
MessageBox.Show("下载成功");
}
private string getNodeVal() {
//await MinioFileManager.DownloadFileAsync("2023-08-10/200406113500-7.jpg");
TreeNode selectedNode = treeView.SelectedNode;
if (selectedNode != null)
{
if (selectedNode.Nodes.Count == 0)
{
// 选定的是叶子节点,拼接完整文件路径
string fullPath = GetFullPath(selectedNode);
return fullPath;
// MessageBox.Show("选定的叶子节点的完整路径:" + fullPath, "完整文件路径", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
// 选定的不是叶子节点,清除选定节点
treeView.SelectedNode = null;
MessageBox.Show("没有选定节点!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
else
{
MessageBox.Show("没有选定节点!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
return null;
}
private string GetFullPath(TreeNode node)
{
string fullPath = node.Text;
TreeNode parentNode = node.Parent;
while (parentNode != null)
{
fullPath = $"{parentNode.Text}/{fullPath}";
parentNode = parentNode.Parent;
}
return fullPath;
}
private void loadBucket() {
treeView.Nodes.Clear();
MinioFileManager.ListObjects(item => {
//textBox1.Invoke(new Action(() => textBox1.Text += $"{item.Key}\n"));
//textBox1.Text += $"{item.Key}\n";
treeView.Invoke(new Action(() => PopulateTreeView(item.Key)));
});
}
private void PopulateTreeView(String filePath)
{
string[] pathSegments = filePath.Split('/');
TreeNode currentNode = null;
TreeNodeCollection nodes = treeView.Nodes;
foreach (string segment in pathSegments)
{
TreeNode[] matchingNodes = nodes.Find(segment, false);
if (matchingNodes.Length > 0)
{
currentNode = matchingNodes[0];
}
else
{
currentNode = nodes.Add(segment, segment);
}
nodes = currentNode.Nodes;
}
}
private void Form1_Load(object sender, EventArgs e)
{
loadBucket();
}
private async void button3_Click(object sender, EventArgs e)
{
var val = getNodeVal();
if (val == null) return;
await MinioFileManager.DeleteFileAsync(val);
MessageBox.Show("删除成功");
loadBucket();
}
private void button4_Click(object sender, EventArgs e)
{
loadBucket();
}
}
}