Compare commits

..

2 Commits

Author SHA1 Message Date
洁 任 04ef99dcc0 Merge branch 'dev2.0' of http://123.132.248.154:10000/chenwei/FieldWorkClient into dev2.0 2025-07-07 15:33:30 +08:00
洁 任 414d6edb04 添加桶,删除桶修改 2025-07-07 15:33:27 +08:00
1 changed files with 66 additions and 34 deletions

View File

@ -30,6 +30,7 @@ using Minio.Exceptions;
using System.Collections.Concurrent;
using System.Security.AccessControl;
using Microsoft.VisualBasic;
using SqlSugar;
namespace HeBianGu.App.Disk
{
@ -527,10 +528,12 @@ namespace HeBianGu.App.Disk
.WithEndpoint(config["Minio:Endpoint"])
.WithCredentials(config["Minio:AccessKey"], config["Minio:SecretKey"])
.Build();
string bucket = folderName;
if (string.IsNullOrWhiteSpace(folderName))
{
return;
}
if (!folderName.EndsWith("/"))
folderName += "/";
@ -538,26 +541,32 @@ namespace HeBianGu.App.Disk
{
var bucketName = GetCurrentBucket();
var prefix = GetCurrentPrefix();
var beArgs = new BucketExistsArgs().WithBucket(bucketName);
bool found = await client.BucketExistsAsync(beArgs);
if (!found)
if (!string.IsNullOrEmpty(bucketName))
{
var mbArgs = new MakeBucketArgs().WithBucket(bucketName);
var beArgs = new BucketExistsArgs().WithBucket(bucketName);
bool found = await client.BucketExistsAsync(beArgs);
if (!found)
{
var mbArgs = new MakeBucketArgs().WithBucket(bucketName);
await client.MakeBucketAsync(mbArgs);
}
using (var emptyStream = new MemoryStream(Encoding.UTF8.GetBytes(" ")))
{
await client.PutObjectAsync(
new PutObjectArgs()
.WithBucket(bucketName)
.WithObject(prefix + folderName)
.WithStreamData(emptyStream)
.WithObjectSize(1) // 必须设置为0
.WithContentType("application/x-directory"));
}
}
else
{
var mbArgs = new MakeBucketArgs().WithBucket(bucket);
await client.MakeBucketAsync(mbArgs);
}
using (var emptyStream = new MemoryStream(Encoding.UTF8.GetBytes(" ")))
{
await client.PutObjectAsync(
new PutObjectArgs()
.WithBucket(bucketName)
.WithObject(prefix + folderName)
.WithStreamData(emptyStream)
.WithObjectSize(1) // 必须设置为0
.WithContentType("application/x-directory"));
}
// 刷新当前目录
_explorerBehavior?.RefreshMinIOPath(CurrentMinIOPath);
}
@ -689,24 +698,47 @@ namespace HeBianGu.App.Disk
else if (item is MinIODirectoryModel dirModel)
{
var dirInfo = (MinIODirectoryInfo)dirModel.Model;
var folderPath = dirInfo.FullName.Substring(dirInfo.BucketName.Length + 1);
// 确保文件夹路径以斜杠结尾
if (!folderPath.EndsWith("/")) folderPath += "/";
// 获取文件夹下所有对象
var listArgs = new ListObjectsArgs()
.WithBucket(bucketName)
.WithPrefix(folderPath)
.WithRecursive(true);
await foreach (var obj in client.ListObjectsEnumAsync(listArgs))
if (dirInfo.BucketName == dirInfo.FullName)
{
objectsToDelete.Add(obj.Key);
// 获取文件夹下所有对象
var listArgs = new ListObjectsArgs()
.WithBucket(bucketName);
List<string> list = new List<string>();
await foreach (var obj in client.ListObjectsEnumAsync(listArgs))
{
list.Add(obj.Key);
}
if(list.Count > 0)
{
SelectedItems.Clear();
throw new Exception($"仅能删除空桶!");
}
else
{
await client.RemoveBucketAsync(new RemoveBucketArgs().WithBucket(dirInfo.BucketName));
}
}
else
{
var folderPath = dirInfo.FullName.Substring(dirInfo.BucketName.Length + 1);
// 添加文件夹标记本身
objectsToDelete.Add(folderPath);
// 确保文件夹路径以斜杠结尾
if (!folderPath.EndsWith("/")) folderPath += "/";
// 获取文件夹下所有对象
var listArgs = new ListObjectsArgs()
.WithBucket(bucketName)
.WithPrefix(folderPath)
.WithRecursive(true);
await foreach (var obj in client.ListObjectsEnumAsync(listArgs))
{
objectsToDelete.Add(obj.Key);
}
// 添加文件夹标记本身
objectsToDelete.Add(folderPath);
}
}
}