Dosya Yöneticisi Resim güncellemeleri

This commit is contained in:
Sedat Öztürk 2026-03-21 22:44:25 +03:00
parent 401db7bfef
commit cb4a74bf81
2 changed files with 52 additions and 8 deletions

View file

@ -51,6 +51,34 @@ public class FileManagementAppService : ApplicationService, IFileManagementAppSe
private string GetTenantPrefix(string tenantId) => $"tenants/{tenantId}/"; private string GetTenantPrefix(string tenantId) => $"tenants/{tenantId}/";
private static string NormalizeExtension(string? extensionOrFileName)
{
if (string.IsNullOrWhiteSpace(extensionOrFileName))
{
return string.Empty;
}
var ext = extensionOrFileName.Trim();
// If a path was provided, extract extension from the file name
if (ext.Contains('/') || ext.Contains('\\'))
{
ext = Path.GetExtension(ext);
}
else if (!ext.StartsWith('.') && ext.Contains('.'))
{
// File name like "photo.jpg" (but not an extension like ".jpg")
ext = Path.GetExtension(ext);
}
if (string.IsNullOrWhiteSpace(ext))
{
return string.Empty;
}
return ext.Trim().TrimStart('.').ToLowerInvariant();
}
private string GetEffectiveTenantId(string? inputTenantId) => private string GetEffectiveTenantId(string? inputTenantId) =>
!string.IsNullOrEmpty(inputTenantId) ? inputTenantId : (_currentTenant.Id?.ToString() ?? "host"); !string.IsNullOrEmpty(inputTenantId) ? inputTenantId : (_currentTenant.Id?.ToString() ?? "host");
@ -170,6 +198,8 @@ public class FileManagementAppService : ApplicationService, IFileManagementAppSe
var fileInfo = new FileInfo(file); var fileInfo = new FileInfo(file);
var relativePath = string.IsNullOrEmpty(folderPath) ? fileInfo.Name : $"{folderPath}/{fileInfo.Name}"; var relativePath = string.IsNullOrEmpty(folderPath) ? fileInfo.Name : $"{folderPath}/{fileInfo.Name}";
var normalizedExtension = NormalizeExtension(fileInfo.Extension);
items.Add(new FileMetadata items.Add(new FileMetadata
{ {
Id = EncodePathAsId(relativePath), Id = EncodePathAsId(relativePath),
@ -181,7 +211,9 @@ public class FileManagementAppService : ApplicationService, IFileManagementAppSe
Path = relativePath, Path = relativePath,
ParentId = folderPath ?? "", ParentId = folderPath ?? "",
IsReadOnly = false, IsReadOnly = false,
TenantId = tenantId == "host" ? null : tenantId TenantId = tenantId == "host" ? null : tenantId,
Extension = normalizedExtension,
MimeType = GetMimeType(normalizedExtension)
}); });
} }
@ -379,6 +411,7 @@ public class FileManagementAppService : ApplicationService, IFileManagementAppSe
} }
var fileInfo = new FileInfo(uniqueFileName); var fileInfo = new FileInfo(uniqueFileName);
var normalizedExtension = NormalizeExtension(fileInfo.Extension);
var metadata = new FileMetadata var metadata = new FileMetadata
{ {
@ -386,8 +419,8 @@ public class FileManagementAppService : ApplicationService, IFileManagementAppSe
Name = uniqueFileName, Name = uniqueFileName,
Type = "file", Type = "file",
Size = fileSize, Size = fileSize,
Extension = fileInfo.Extension, Extension = normalizedExtension,
MimeType = GetMimeType(fileInfo.Extension), MimeType = GetMimeType(normalizedExtension),
CreatedAt = DateTime.UtcNow, CreatedAt = DateTime.UtcNow,
ModifiedAt = DateTime.UtcNow, ModifiedAt = DateTime.UtcNow,
Path = filePath, Path = filePath,
@ -711,7 +744,7 @@ public class FileManagementAppService : ApplicationService, IFileManagementAppSe
File.Copy(sourceFullPath, uniqueTargetPath); File.Copy(sourceFullPath, uniqueTargetPath);
var fileInfo = new FileInfo(uniqueTargetPath); var fileInfo = new FileInfo(uniqueTargetPath);
var extension = fileInfo.Extension; var extension = NormalizeExtension(fileInfo.Extension);
copiedItems.Add(new FileItemDto copiedItems.Add(new FileItemDto
{ {
@ -839,7 +872,7 @@ public class FileManagementAppService : ApplicationService, IFileManagementAppSe
File.Move(sourceFullPath, uniqueTargetPath); File.Move(sourceFullPath, uniqueTargetPath);
var fileInfo = new FileInfo(uniqueTargetPath); var fileInfo = new FileInfo(uniqueTargetPath);
var extension = fileInfo.Extension; var extension = NormalizeExtension(fileInfo.Extension);
movedItems.Add(new FileItemDto movedItems.Add(new FileItemDto
{ {
@ -1013,7 +1046,16 @@ public class FileManagementAppService : ApplicationService, IFileManagementAppSe
private string GetMimeType(string extension) private string GetMimeType(string extension)
{ {
return extension.ToLowerInvariant() switch if (string.IsNullOrWhiteSpace(extension))
{
return "application/octet-stream";
}
var normalized = extension.Trim();
normalized = normalized.StartsWith('.') ? normalized : "." + normalized;
normalized = normalized.ToLowerInvariant();
return normalized switch
{ {
".txt" => "text/plain", ".txt" => "text/plain",
".pdf" => "application/pdf", ".pdf" => "application/pdf",

View file

@ -324,6 +324,8 @@ const FileItem = forwardRef<HTMLDivElement, FileItemProps>((props, ref) => {
const ImagePreview = ({ src, alt }: { src: string; alt: string }) => { const ImagePreview = ({ src, alt }: { src: string; alt: string }) => {
const [imageError, setImageError] = useState(false) const [imageError, setImageError] = useState(false)
console.log('Rendering ImagePreview with src:', src) // Debug için
return ( return (
<div className="w-full h-full bg-gray-100 dark:bg-gray-700 rounded flex items-center justify-center overflow-hidden"> <div className="w-full h-full bg-gray-100 dark:bg-gray-700 rounded flex items-center justify-center overflow-hidden">
{!imageError ? ( {!imageError ? (
@ -378,7 +380,7 @@ const FileItem = forwardRef<HTMLDivElement, FileItemProps>((props, ref) => {
<div className="w-8 h-8"> <div className="w-8 h-8">
{item.type === 'file' && item.mimeType?.startsWith('image/') ? ( {item.type === 'file' && item.mimeType?.startsWith('image/') ? (
<ImagePreview <ImagePreview
src={`/api/app/file-management/${item.id}/download-file`} src={FILE_URL(item.path, item.tenantId)}
alt={item.name} alt={item.name}
/> />
) : ( ) : (
@ -477,7 +479,7 @@ const FileItem = forwardRef<HTMLDivElement, FileItemProps>((props, ref) => {
{item.type === 'file' && item.mimeType?.startsWith('image/') ? ( {item.type === 'file' && item.mimeType?.startsWith('image/') ? (
<div className="w-16 h-16"> <div className="w-16 h-16">
<ImagePreview <ImagePreview
src={`/api/app/file-management/${item.id}/download-file`} src={FILE_URL(item.path, item.tenantId)}
alt={item.name} alt={item.name}
/> />
</div> </div>