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