From dd82d405ce3ee01d0b7df43835a1037fee1be9ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sedat=20=C3=96zt=C3=BCrk?= Date: Sat, 21 Mar 2026 23:04:57 +0300 Subject: [PATCH] =?UTF-8?q?Dosya=20y=C3=B6neticisi=20Tenant=20path=20d?= =?UTF-8?q?=C3=BCzenlemesi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FileManagementAppService.cs | 46 +++++++++++++------ 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/api/src/Sozsoft.Platform.Application/FileManagement/FileManagementAppService.cs b/api/src/Sozsoft.Platform.Application/FileManagement/FileManagementAppService.cs index 9171ccf..156aaa5 100644 --- a/api/src/Sozsoft.Platform.Application/FileManagement/FileManagementAppService.cs +++ b/api/src/Sozsoft.Platform.Application/FileManagement/FileManagementAppService.cs @@ -49,8 +49,24 @@ public class FileManagementAppService : ApplicationService, IFileManagementAppSe _configuration = configuration; } + private const string HostFolderName = "host"; + private const string TenantsFolderName = "tenants"; + private string GetTenantPrefix(string tenantId) => $"tenants/{tenantId}/"; + private static bool IsHostTenant(string tenantId) => + tenantId.Equals(HostFolderName, StringComparison.OrdinalIgnoreCase); + + private static string ToSystemPath(string path) => + path.Replace('\\', Path.DirectorySeparatorChar).Replace('/', Path.DirectorySeparatorChar); + + private static string GetCdnTenantRootPath(string cdnBasePath, string effectiveTenantId) + { + return IsHostTenant(effectiveTenantId) + ? Path.Combine(cdnBasePath, HostFolderName) + : Path.Combine(cdnBasePath, TenantsFolderName, effectiveTenantId); + } + private static string NormalizeExtension(string? extensionOrFileName) { if (string.IsNullOrWhiteSpace(extensionOrFileName)) @@ -140,11 +156,11 @@ public class FileManagementAppService : ApplicationService, IFileManagementAppSe return items; } - var fullPath = Path.Combine(cdnBasePath, tenantId); + var fullPath = GetCdnTenantRootPath(cdnBasePath, tenantId); if (!string.IsNullOrEmpty(folderPath)) { - fullPath = Path.Combine(fullPath, folderPath); + fullPath = Path.Combine(fullPath, ToSystemPath(folderPath)); } try @@ -296,13 +312,13 @@ public class FileManagementAppService : ApplicationService, IFileManagementAppSe } var tenantId = GetEffectiveTenantId(input.TenantId); - var parentPath = Path.Combine(cdnBasePath, tenantId); + var parentPath = GetCdnTenantRootPath(cdnBasePath, tenantId); string? decodedParentId = null; if (!string.IsNullOrEmpty(input.ParentId)) { decodedParentId = DecodeIdAsPath(input.ParentId); - parentPath = Path.Combine(parentPath, decodedParentId); + parentPath = Path.Combine(parentPath, ToSystemPath(decodedParentId)); } var folderPath = Path.Combine(parentPath, input.Name); @@ -383,11 +399,11 @@ public class FileManagementAppService : ApplicationService, IFileManagementAppSe throw new UserFriendlyException("CDN path is not configured"); } - var fullCdnPath = Path.Combine(cdnBasePath, tenantId); + var fullCdnPath = GetCdnTenantRootPath(cdnBasePath, tenantId); if (!string.IsNullOrEmpty(decodedParentId)) { - fullCdnPath = Path.Combine(fullCdnPath, decodedParentId); + fullCdnPath = Path.Combine(fullCdnPath, ToSystemPath(decodedParentId)); } // Dizini oluştur @@ -598,7 +614,7 @@ public class FileManagementAppService : ApplicationService, IFileManagementAppSe var effectiveTenantId = GetEffectiveTenantId(tenantId); var actualPath = DecodeIdAsPath(id); - var fullPath = Path.Combine(cdnBasePath, effectiveTenantId, actualPath); + var fullPath = Path.Combine(GetCdnTenantRootPath(cdnBasePath, effectiveTenantId), ToSystemPath(actualPath)); if (Directory.Exists(fullPath)) { @@ -641,7 +657,7 @@ public class FileManagementAppService : ApplicationService, IFileManagementAppSe ValidateNotProtectedFolder(itemId, "delete"); var actualPath = DecodeIdAsPath(itemId); - var fullPath = Path.Combine(cdnBasePath, tenantId, actualPath); + var fullPath = Path.Combine(GetCdnTenantRootPath(cdnBasePath, tenantId), ToSystemPath(actualPath)); if (Directory.Exists(fullPath)) { @@ -685,7 +701,7 @@ public class FileManagementAppService : ApplicationService, IFileManagementAppSe } var tenantId = GetEffectiveTenantId(input.TenantId); - var basePath = Path.Combine(cdnBasePath, tenantId); + var basePath = GetCdnTenantRootPath(cdnBasePath, tenantId); string? targetPath = null; if (!string.IsNullOrEmpty(input.TargetFolderId)) @@ -701,14 +717,14 @@ public class FileManagementAppService : ApplicationService, IFileManagementAppSe try { var sourcePath = DecodeIdAsPath(itemId); - var sourceFullPath = Path.Combine(basePath, sourcePath); + var sourceFullPath = Path.Combine(basePath, ToSystemPath(sourcePath)); // Get source item name var sourceItemName = Path.GetFileName(sourcePath); // Generate unique name if item already exists in target var targetItemPath = string.IsNullOrEmpty(targetPath) ? sourceItemName : $"{targetPath}/{sourceItemName}"; - var targetFullPath = Path.Combine(basePath, targetItemPath); + var targetFullPath = Path.Combine(basePath, ToSystemPath(targetItemPath)); var uniqueTargetPath = GetUniqueItemPath(targetFullPath, sourceItemName); var finalTargetPath = uniqueTargetPath.Replace(basePath + Path.DirectorySeparatorChar, "").Replace(Path.DirectorySeparatorChar, '/'); @@ -796,7 +812,7 @@ public class FileManagementAppService : ApplicationService, IFileManagementAppSe } var tenantId = GetEffectiveTenantId(input.TenantId); - var basePath = Path.Combine(cdnBasePath, tenantId); + var basePath = GetCdnTenantRootPath(cdnBasePath, tenantId); string? targetPath = null; if (!string.IsNullOrEmpty(input.TargetFolderId)) @@ -815,14 +831,14 @@ public class FileManagementAppService : ApplicationService, IFileManagementAppSe ValidateNotProtectedFolder(itemId, "move"); var sourcePath = DecodeIdAsPath(itemId); - var sourceFullPath = Path.Combine(basePath, sourcePath); + var sourceFullPath = Path.Combine(basePath, ToSystemPath(sourcePath)); // Get source item name var sourceItemName = Path.GetFileName(sourcePath); // Generate target path var targetItemPath = string.IsNullOrEmpty(targetPath) ? sourceItemName : $"{targetPath}/{sourceItemName}"; - var targetFullPath = Path.Combine(basePath, targetItemPath); + var targetFullPath = Path.Combine(basePath, ToSystemPath(targetItemPath)); // Check if moving to same location if (Path.GetFullPath(sourceFullPath) == Path.GetFullPath(targetFullPath)) @@ -920,7 +936,7 @@ public class FileManagementAppService : ApplicationService, IFileManagementAppSe var effectiveTenantId = GetEffectiveTenantId(tenantId); var actualPath = DecodeIdAsPath(id); - var fullFilePath = Path.Combine(cdnBasePath, effectiveTenantId, actualPath); + var fullFilePath = Path.Combine(GetCdnTenantRootPath(cdnBasePath, effectiveTenantId), ToSystemPath(actualPath)); if (!File.Exists(fullFilePath)) {