diff --git a/BTCPayServer.Tests/StorageTests.cs b/BTCPayServer.Tests/StorageTests.cs index d7ed784ef..b7ac60ef9 100644 --- a/BTCPayServer.Tests/StorageTests.cs +++ b/BTCPayServer.Tests/StorageTests.cs @@ -10,6 +10,7 @@ using BTCPayServer.Storage.Services.Providers.AzureBlobStorage.Configuration; using BTCPayServer.Storage.Services.Providers.FileSystemStorage.Configuration; using BTCPayServer.Storage.ViewModels; using BTCPayServer.Tests.Logging; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using Xunit; @@ -180,7 +181,10 @@ namespace BTCPayServer.Tests private async Task CanUploadRemoveFiles(ServerController controller) { var fileContent = "content"; - var uploadFormFileResult = Assert.IsType(await controller.CreateFile(TestUtils.GetFormFile("uploadtestfile.txt", fileContent))); + List fileList = new List(); + fileList.Add(TestUtils.GetFormFile("uploadtestfile1.txt", fileContent)); + + var uploadFormFileResult = Assert.IsType(await controller.CreateFiles(fileList)); Assert.True(uploadFormFileResult.RouteValues.ContainsKey("fileId")); var fileId = uploadFormFileResult.RouteValues["fileId"].ToString(); Assert.Equal("Files", uploadFormFileResult.ActionName); diff --git a/BTCPayServer/Controllers/ServerController.Storage.cs b/BTCPayServer/Controllers/ServerController.Storage.cs index 5ac8f4eed..aba106aba 100644 --- a/BTCPayServer/Controllers/ServerController.Storage.cs +++ b/BTCPayServer/Controllers/ServerController.Storage.cs @@ -146,27 +146,50 @@ namespace BTCPayServer.Controllers public bool IsDownload { get; set; } } - + [HttpPost("server/files/upload")] - public async Task CreateFile(List files) + public async Task CreateFiles(List files) { - if (files.Count > 0) + if (files != null && files.Count > 0) { + int invalidFileNameCount = 0; List fileIds = new List(); foreach (IFormFile file in files) { if (!file.FileName.IsValidFileName()) { - this.TempData.SetStatusMessageModel(new StatusMessageModel() - { - Message = "Invalid file name", - Severity = StatusMessageModel.StatusSeverity.Error - }); + invalidFileNameCount++; continue; } var newFile = await _FileService.AddFile(file, GetUserId()); fileIds.Add(newFile.Id); } + + StatusMessageModel.StatusSeverity statusMessageSeverity; + string statusMessage; + + if (invalidFileNameCount == 0) + { + statusMessage = "Files Added Successfully"; + statusMessageSeverity = StatusMessageModel.StatusSeverity.Success; + } + else if (invalidFileNameCount > 0 && invalidFileNameCount < files.Count) + { + statusMessage = $"{files.Count - invalidFileNameCount} files were added. {invalidFileNameCount} files had invalid names"; + statusMessageSeverity = StatusMessageModel.StatusSeverity.Error; + } + else + { + statusMessage = $"Files could not be added due to invalid names"; + statusMessageSeverity = StatusMessageModel.StatusSeverity.Error; + } + + this.TempData.SetStatusMessageModel(new StatusMessageModel() + { + Message = statusMessage, + Severity = statusMessageSeverity + }); + if (fileIds.Count == 1) { return RedirectToAction(nameof(Files), new diff --git a/BTCPayServer/Views/Server/Files.cshtml b/BTCPayServer/Views/Server/Files.cshtml index e82b46eaa..685d6aee7 100644 --- a/BTCPayServer/Views/Server/Files.cshtml +++ b/BTCPayServer/Views/Server/Files.cshtml @@ -92,9 +92,9 @@ else @if (Model.StorageConfigured) { -
+

Upload Files

- +
}