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.Collections.Concurrent;
using System.Security.AccessControl; using System.Security.AccessControl;
using Microsoft.VisualBasic; using Microsoft.VisualBasic;
using SqlSugar;
namespace HeBianGu.App.Disk namespace HeBianGu.App.Disk
{ {
@ -527,9 +528,11 @@ namespace HeBianGu.App.Disk
.WithEndpoint(config["Minio:Endpoint"]) .WithEndpoint(config["Minio:Endpoint"])
.WithCredentials(config["Minio:AccessKey"], config["Minio:SecretKey"]) .WithCredentials(config["Minio:AccessKey"], config["Minio:SecretKey"])
.Build(); .Build();
string bucket = folderName;
if (string.IsNullOrWhiteSpace(folderName)) if (string.IsNullOrWhiteSpace(folderName))
{
return; return;
}
if (!folderName.EndsWith("/")) if (!folderName.EndsWith("/"))
folderName += "/"; folderName += "/";
@ -538,26 +541,32 @@ namespace HeBianGu.App.Disk
{ {
var bucketName = GetCurrentBucket(); var bucketName = GetCurrentBucket();
var prefix = GetCurrentPrefix(); var prefix = GetCurrentPrefix();
if (!string.IsNullOrEmpty(bucketName))
var beArgs = new BucketExistsArgs().WithBucket(bucketName);
bool found = await client.BucketExistsAsync(beArgs);
if (!found)
{ {
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); 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); _explorerBehavior?.RefreshMinIOPath(CurrentMinIOPath);
} }
@ -689,24 +698,47 @@ namespace HeBianGu.App.Disk
else if (item is MinIODirectoryModel dirModel) else if (item is MinIODirectoryModel dirModel)
{ {
var dirInfo = (MinIODirectoryInfo)dirModel.Model; var dirInfo = (MinIODirectoryInfo)dirModel.Model;
var folderPath = dirInfo.FullName.Substring(dirInfo.BucketName.Length + 1); if (dirInfo.BucketName == dirInfo.FullName)
// 确保文件夹路径以斜杠结尾
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); // 获取文件夹下所有对象
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);
}
} }
} }