diff --git a/FileStorageService.www.Test/FileStorageService.www.Test.csproj b/FileStorageService.www.Test/FileStorageService.www.Test.csproj
index eeec78a..8269de7 100644
--- a/FileStorageService.www.Test/FileStorageService.www.Test.csproj
+++ b/FileStorageService.www.Test/FileStorageService.www.Test.csproj
@@ -13,10 +13,15 @@
+
-
-
-
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
diff --git a/FileStorageService.www.Test/Repositories/FileRepositoryTests.cs b/FileStorageService.www.Test/Repositories/FileRepositoryTests.cs
index 5e329e8..d5efa9e 100644
--- a/FileStorageService.www.Test/Repositories/FileRepositoryTests.cs
+++ b/FileStorageService.www.Test/Repositories/FileRepositoryTests.cs
@@ -2,15 +2,24 @@ using FileStorageService.www.Data;
using FileStorageService.www.Repositories;
using Microsoft.Data.Sqlite;
using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.Logging;
+using Moq;
namespace FileStorageService.www.Test.Repositories;
public class FileRepositoryTests
{
+ private readonly Logger _logger;
private readonly ApplicationDbContext _context;
public FileRepositoryTests()
{
+ var mock = new Mock>();
+
+ mock.SetupAllProperties();
+
+ _logger = mock.Object;
+
var connection = new SqliteConnection("Filename=:memory:");
connection.Open();
@@ -24,8 +33,7 @@ public class FileRepositoryTests
_context.Database.EnsureCreated();
}
- private FileRepository repository => new FileRepository(_context);
-
+ private FileRepository repository => new(_logger, _context);
[Theory]
[InlineData("one", 1)]
diff --git a/FileStorageService.www/Controllers/FilesController.cs b/FileStorageService.www/Controllers/FilesController.cs
index e4f7afa..961b3f2 100644
--- a/FileStorageService.www/Controllers/FilesController.cs
+++ b/FileStorageService.www/Controllers/FilesController.cs
@@ -75,10 +75,7 @@ public class FilesController(
var fileHandleId = await fileRepository.TryNewFileAsync(name, stream);
- if (fileHandleId != null)
- return RedirectToAction("Index", "Files", new { id = fileHandleId });
-
- return RedirectToAction("NotEnoughSpace");
+ return fileHandleId != null ? RedirectToAction("Index", "Files", new { id = fileHandleId }) : RedirectToAction("NotEnoughSpace");
}
public IActionResult NotEnoughSpace()
diff --git a/FileStorageService.www/Data/FileBlock.cs b/FileStorageService.www/Data/FileBlock.cs
index 1b6ebdc..21667d1 100644
--- a/FileStorageService.www/Data/FileBlock.cs
+++ b/FileStorageService.www/Data/FileBlock.cs
@@ -12,7 +12,7 @@ public class FileBlock
public required int BlockNumber { get; init; }
[DataType("BLOB")]
- [MaxLength(1024)]
+ [MaxLength(4096)]
public required byte[] Data { get; init; }
public required FileHandle FileHandle { get; init; }
diff --git a/FileStorageService.www/Program.cs b/FileStorageService.www/Program.cs
index da9f7a5..3bd566f 100644
--- a/FileStorageService.www/Program.cs
+++ b/FileStorageService.www/Program.cs
@@ -23,6 +23,7 @@ builder.Services.AddScoped();
var app = builder.Build();
+
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
@@ -31,10 +32,10 @@ if (app.Environment.IsDevelopment())
else
{
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
- app.UseHsts();
+ // app.UseHsts();
}
-app.UseHttpsRedirection();
+// app.UseHttpsRedirection();
app.UseStatusCodePagesWithRedirects("/Error/Status/{0}");
diff --git a/FileStorageService.www/Properties/launchSettings.json b/FileStorageService.www/Properties/launchSettings.json
index 26b8226..412133a 100644
--- a/FileStorageService.www/Properties/launchSettings.json
+++ b/FileStorageService.www/Properties/launchSettings.json
@@ -5,7 +5,7 @@
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
- "applicationUrl": "http://localhost:5197",
+ "applicationUrl": "http://localhost:5197;http://british-information-technologies.org:5197",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
diff --git a/FileStorageService.www/Repositories/FileRepository.cs b/FileStorageService.www/Repositories/FileRepository.cs
index 5b187f4..5b008f5 100644
--- a/FileStorageService.www/Repositories/FileRepository.cs
+++ b/FileStorageService.www/Repositories/FileRepository.cs
@@ -5,9 +5,12 @@ using Microsoft.EntityFrameworkCore;
namespace FileStorageService.www.Repositories;
-public class FileRepository(ApplicationDbContext context)
+public class FileRepository(
+ ILogger logger,
+ ApplicationDbContext context)
{
public static readonly int MAX_BLOCKS = 10_485_760;
+ public static readonly int BLOCK_SIZE = 4096;
private readonly Queue<(string, Stream, TaskCompletionSource)> _creationQueue = new();
private readonly Lock _countLock = new();
@@ -66,7 +69,7 @@ public class FileRepository(ApplicationDbContext context)
return tcs.Task;
}
-
+
private async Task StartProcessFileUpload()
{
Stream stream;
@@ -107,17 +110,24 @@ public class FileRepository(ApplicationDbContext context)
private async Task CreateFileBlocks(Stream reader, FileHandle fileHandle)
{
var blockNumber = 0;
- var buffer = new byte[1024];
+ var buffer = new byte[BLOCK_SIZE];
+
while (await reader.ReadAsync(buffer) > 0)
{
- var block = new FileBlock
+ var num = blockNumber++;
+ Task.Run(() =>
{
- BlockNumber = blockNumber++,
- Data = buffer.ToArray(),
- FileHandle = fileHandle
- };
- fileHandle.FileBlocks.Add(block);
+ var block = new FileBlock
+ {
+ BlockNumber = num,
+ Data = buffer.ToArray(),
+ FileHandle = fileHandle
+ };
+ fileHandle.FileBlocks.Add(block);
+
+ logger.LogInformation($"Saved block {num}");
+ });
}
return fileHandle;