Compare commits
2 Commits
9c4b4c85cb
...
04ef99dcc0
| Author | SHA1 | Date |
|---|---|---|
|
|
04ef99dcc0 | |
|
|
414d6edb04 |
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue