diff --git a/.gitignore b/.gitignore
index 0a8e0559ee40f980c98cf9af85ceef89e5cdc385..c524fb9e6a76f62d010c6ea470ea1966e71452a7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,4 @@
 .vs
 obj
 bin
+StaticFiles
diff --git a/Tsi1.Api/Tsi1.Api/Startup.cs b/Tsi1.Api/Tsi1.Api/Startup.cs
index 55f7de4a151c1a5658bba8cda2ba0f6c569f4dd8..b4f76b7dec3f433980490adc5cf5a8e6439fd24c 100644
--- a/Tsi1.Api/Tsi1.Api/Startup.cs
+++ b/Tsi1.Api/Tsi1.Api/Startup.cs
@@ -68,7 +68,7 @@ namespace Tsi1.Api
             services.AddSingleton<IJwtAuthManager, JwtAuthManager>();
             services.AddHostedService<JwtRefreshTokenCache>();
             services.AddHostedService<JwtVerificationCodeCache>();
-            services.AddHostedService<FileCleanerService>();
+            services.AddHostedService<FileCleaner>();
 
             services.AddSingleton<IMessageService, MessageService>();
 
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/HostedServices/FileCleaner.cs b/Tsi1.Api/Tsi1.BusinessLayer/HostedServices/FileCleaner.cs
new file mode 100644
index 0000000000000000000000000000000000000000..7a5df1102adad587acc45fa417539d77993de5fa
--- /dev/null
+++ b/Tsi1.Api/Tsi1.BusinessLayer/HostedServices/FileCleaner.cs
@@ -0,0 +1,54 @@
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+using System;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+using Tsi1.BusinessLayer.Interfaces;
+
+namespace Tsi1.BusinessLayer.HostedServices
+{
+    public class FileCleaner : IHostedService, IDisposable
+    {
+        private Timer _timer;
+        private readonly IServiceScopeFactory _serviceScopeFactory;
+
+        public FileCleaner(IServiceScopeFactory serviceScopeFactory)
+        {
+            _serviceScopeFactory = serviceScopeFactory;
+        }
+
+        public Task StartAsync(CancellationToken cancellationToken)
+        {
+            _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromDays(1));
+            return Task.CompletedTask;
+        }
+
+        private async void DoWork(object state)
+        {
+            using (var scope = _serviceScopeFactory.CreateScope())
+            {
+                var fileService = scope.ServiceProvider.GetRequiredService<IFileService>();
+                var dbFileNames = await fileService.GetFileNames();
+                var fsFiles = fileService.GetPhysicalFiles();
+
+                var filesToDelete = fsFiles.Except(dbFileNames);
+                foreach (var file in filesToDelete)
+                {
+                    fileService.DeleteFile(file);
+                }
+            }
+        }
+
+        public Task StopAsync(CancellationToken cancellationToken)
+        {
+            _timer?.Change(Timeout.Infinite, 0);
+            return Task.CompletedTask;
+        }
+
+        public void Dispose()
+        {
+            _timer?.Dispose();
+        }
+    }
+}
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/HostedServices/FileCleanerService.cs b/Tsi1.Api/Tsi1.BusinessLayer/HostedServices/FileCleanerService.cs
deleted file mode 100644
index 0a95d33dacd68f459f355c1ad2a75c12e0caa878..0000000000000000000000000000000000000000
--- a/Tsi1.Api/Tsi1.BusinessLayer/HostedServices/FileCleanerService.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-using Microsoft.Extensions.Hosting;
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-using Tsi1.BusinessLayer.Interfaces;
-
-namespace Tsi1.BusinessLayer.HostedServices
-{
-    public class FileCleanerService : IHostedService, IDisposable
-    {
-        private Timer _timer;
-        private readonly IFileService _fileService;
-
-        public FileCleanerService(IFileService fileService)
-        {
-            _fileService = fileService;
-        }
-
-        public Task StartAsync(CancellationToken cancellationToken)
-        {
-            throw new NotImplementedException();
-        }
-
-        private void DoWork(object state)
-        {
-
-        }
-
-        public Task StopAsync(CancellationToken cancellationToken)
-        {
-            throw new NotImplementedException();
-        }
-
-        public void Dispose()
-        {
-            _timer?.Dispose();
-        }
-    }
-}
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/IFileService.cs b/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/IFileService.cs
index fce0c43ab62d1ecbc8bff98a6292ccf1b320cb2e..c0392df3d36d9d1f8f0e6af98659f92b49b1d438 100644
--- a/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/IFileService.cs
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Interfaces/IFileService.cs
@@ -14,5 +14,6 @@ namespace Tsi1.BusinessLayer.Interfaces
         Task<List<string>> GetFileNames();
         ServiceResult<bool> DeleteFile(string filePath);
         bool ExistFile(string relativePath);
+        List<string> GetPhysicalFiles();
     }
 }
diff --git a/Tsi1.Api/Tsi1.BusinessLayer/Services/FileService.cs b/Tsi1.Api/Tsi1.BusinessLayer/Services/FileService.cs
index 2fd8e7295993c8a9c6fd911da30a4d3590f99501..304ed2561ed50cb60bb7683252d89a6320204638 100644
--- a/Tsi1.Api/Tsi1.BusinessLayer/Services/FileService.cs
+++ b/Tsi1.Api/Tsi1.BusinessLayer/Services/FileService.cs
@@ -19,9 +19,7 @@ namespace Tsi1.BusinessLayer.Services
     public class FileService : IFileService
     {
         private readonly Tsi1Context _context;
-
         private readonly IMapper _mapper;
-
         private readonly string _path;
 
         public FileService(Tsi1Context context, IMapper mapper, IHostingEnvironment hostingEnvironment)
@@ -108,21 +106,22 @@ namespace Tsi1.BusinessLayer.Services
             return System.IO.File.Exists(path);
         }
 
+        public async Task<List<string>> GetFileNames()
+        {
+            return await _context.Files.Select(x => x.Path).ToListAsync();
+        }
+
+        public List<string> GetPhysicalFiles()
+        {
+            return Directory.GetFiles(_path, "*", SearchOption.AllDirectories).ToList();
+        }
+
         private string GenerateFileName(IFormFile file)
         {
             var ext = file.FileName.Split(".").Last();
             var fileName = Guid.NewGuid().ToString();
-
             return fileName + "." + ext;
         }
 
-        public async Task<List<string>> GetFileNames()
-        {
-            var fileNames = await _context.Files.Select(x => Path.GetFileName(x.Path)).ToListAsync();
-
-            fileNames.RemoveAll(x => x.Length == 0);
-
-            return fileNames;
-        }
     }
 }