This commit is contained in:
zpc 2025-08-21 13:08:05 +08:00
parent 5c282a5fef
commit 913ce41ca5

View File

@ -491,5 +491,119 @@ namespace ZR.Admin.WebApi.Controllers
}
}
}
/// <summary>
/// 获取workfiles文件夹大小信息
/// </summary>
/// <returns></returns>
[HttpGet]
[Route("/getWorkfilesSize")]
[AllowAnonymous]
public IActionResult GetWorkfilesSize()
{
try
{
var workfilesPath = Path.Combine(WebHostEnvironment.WebRootPath, "workfiles");
if (!Directory.Exists(workfilesPath))
{
return ToResponse(ResultCode.FAIL, "workfiles文件夹不存在");
}
var result = new
{
TotalSize = GetDirectorySize(workfilesPath),
TotalSizeFormatted = FormatFileSize(GetDirectorySize(workfilesPath)),
DailyFolders = GetDailyFoldersSize(workfilesPath)
};
return SUCCESS(result);
}
catch (Exception ex)
{
logger.Error(ex, "获取workfiles文件夹大小信息失败");
return ToResponse(ResultCode.FAIL, "获取文件夹大小信息失败");
}
}
/// <summary>
/// 计算目录大小
/// </summary>
/// <param name="directoryPath">目录路径</param>
/// <returns>目录大小(字节)</returns>
private long GetDirectorySize(string directoryPath)
{
long size = 0;
try
{
var directory = new DirectoryInfo(directoryPath);
var files = directory.GetFiles("*", SearchOption.AllDirectories);
size = files.Sum(file => file.Length);
}
catch (Exception ex)
{
logger.Error(ex, $"计算目录大小失败: {directoryPath}");
}
return size;
}
/// <summary>
/// 格式化文件大小
/// </summary>
/// <param name="bytes">字节数</param>
/// <returns>格式化后的大小字符串</returns>
private string FormatFileSize(long bytes)
{
string[] sizes = { "B", "KB", "MB", "GB", "TB" };
double len = bytes;
int order = 0;
while (len >= 1024 && order < sizes.Length - 1)
{
order++;
len = len / 1024;
}
return $"{len:0.##} {sizes[order]}";
}
/// <summary>
/// 获取每日文件夹大小信息
/// </summary>
/// <param name="workfilesPath">workfiles路径</param>
/// <returns>每日文件夹大小信息列表</returns>
private List<object> GetDailyFoldersSize(string workfilesPath)
{
var dailyFolders = new List<object>();
try
{
var directory = new DirectoryInfo(workfilesPath);
var subDirectories = directory.GetDirectories();
foreach (var subDir in subDirectories)
{
var folderSize = GetDirectorySize(subDir.FullName);
var folderInfo = new
{
FolderName = subDir.Name,
Size = folderSize,
SizeFormatted = FormatFileSize(folderSize),
FileCount = subDir.GetFiles("*", SearchOption.AllDirectories).Length,
LastModified = subDir.LastWriteTime
};
dailyFolders.Add(folderInfo);
}
// 按文件夹名称排序(通常是日期格式)
dailyFolders = dailyFolders.OrderByDescending(x => ((dynamic)x).FolderName).ToList();
}
catch (Exception ex)
{
logger.Error(ex, "获取每日文件夹大小信息失败");
}
return dailyFolders;
}
}
}