33
This commit is contained in:
parent
5c282a5fef
commit
913ce41ca5
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user