diff --git a/src/WorkFlowCheck.API/Controllers/SystemController.cs b/src/WorkFlowCheck.API/Controllers/SystemController.cs index 54a44e1..99a9029 100644 --- a/src/WorkFlowCheck.API/Controllers/SystemController.cs +++ b/src/WorkFlowCheck.API/Controllers/SystemController.cs @@ -1,5 +1,6 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; +using Serilog; using WorkFlowCheck.BL.Services.Interfaces; using WorkFlowCheck.Common.DTO; @@ -11,12 +12,12 @@ namespace WorkFlowCheck.API.Controllers { private readonly ISystemService _systemService; - - public SystemController(ISystemService systemService) - { + + public SystemController(ISystemService systemService) + { _systemService = systemService; - } - + } + [HttpGet("GetDatabaseAndVersionInfo")] public async Task> GetDatabaseAndVersionInfo() { @@ -24,7 +25,7 @@ namespace WorkFlowCheck.API.Controllers { IsSuccess = true, }; - var result = await _systemService.GetDatabaseAndVersionInfoAsync(); + var result = await _systemService.GetDatabaseAndVersionInfoAsync(); if (result != null) { @@ -39,5 +40,104 @@ namespace WorkFlowCheck.API.Controllers return retVal; } + + [HttpGet("GetAllImageFiles")] + public async Task>> GetAllImageFilesAsync() + { + var retVal = new ApiResponseDTO>() + { + IsSuccess = true, + }; + try + { + var imageFolder = Path.Combine(Directory.GetCurrentDirectory(), "Images"); + var files = Directory.GetFiles(imageFolder) + .Select(f => + { + var fileInfo = new FileInfo(f); + return new + { + FileName = fileInfo.Name, + FileSize = FormatFileSize(fileInfo.Length), + CreatedDate = fileInfo.CreationTime.ToString("yyyy.MM.dd HH:mm"), + }; + }); + + var checkListFileInfos = new List(); + foreach (var file in files.OrderBy(o => o.FileName).ToList()) + { + var checkListFileInfoDTO = new ImageFileDTO() + { + FileName = file.FileName, + FileSize = file.FileSize, + CreateDate = file.CreatedDate, + + }; + checkListFileInfos.Add(checkListFileInfoDTO); + } + + if (checkListFileInfos != null) + { + retVal.IsSuccess = true; + retVal.Data = checkListFileInfos; + } + else + { + retVal.IsSuccess = false; + retVal.Errors.Add("No data!"); + } + } + catch (Exception ex) + { + Log.Error(ex.Message); + } + return retVal; + } + + [HttpGet("DownloadFile/{filename}")] + public async Task> DownloadFile(string filename) + { + var retVal = new ApiResponseDTO() + { + IsSuccess = false, + }; + var imageFile = Path.Combine(Directory.GetCurrentDirectory(), "Images", filename); + + if (!System.IO.File.Exists(imageFile)) + { + retVal.Errors.Add($"{filename} does not exist"); + return retVal; + } + + byte[] response = System.IO.File.ReadAllBytes(imageFile); + + + if (response != null) + { + + retVal.IsSuccess = true; + retVal.Data = response; + } + else + { + retVal.IsSuccess = false; + retVal.Errors.Add("No data!"); + } + + return retVal; + } + + private string FormatFileSize(long bytes) + { + string[] sizes = { "B", "KB", "MB", "GB", "TB" }; + double len = bytes; + int order = 0; + while (len >= 1024 && order < sizes.Length - 1) + { + order++; + len /= 1024; + } + return $"{len:0.##} {sizes[order]}"; + } } } diff --git a/src/WorkFlowCheck.Common/DTO/ImageFileDTO.cs b/src/WorkFlowCheck.Common/DTO/ImageFileDTO.cs new file mode 100644 index 0000000..ade48f9 --- /dev/null +++ b/src/WorkFlowCheck.Common/DTO/ImageFileDTO.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace WorkFlowCheck.Common.DTO +{ + public class ImageFileDTO + { + public string Id { get; set; } + public string FileName { get; set; } + public string FileSize { get; set; } + public string CreateDate { get; set; } + } +} diff --git a/src/WorkFlowCheck.Web/Pages/BaseStock/ImageFiles/ImageFilesPage.cshtml b/src/WorkFlowCheck.Web/Pages/BaseStock/ImageFiles/ImageFilesPage.cshtml new file mode 100644 index 0000000..a96b802 --- /dev/null +++ b/src/WorkFlowCheck.Web/Pages/BaseStock/ImageFiles/ImageFilesPage.cshtml @@ -0,0 +1,80 @@ +@page +@model WorkFlowCheck.Web.Pages.BaseStock.ImageFiles.ImageFilesPageModel +@using WorkFlowCheck.Common.Helper +@using WorkFlowCheck.Common.DTO +@{ + ViewData["Title"] = "Berendezések"; +} +

@ViewData["Title"]

+ +
+ + + + + + + + + + + + + + + + + + + +
ID@DisplayNameHelper.GetDisplayName(nameof(ImageFileDTO.FileName), typeof(ImageFileDTO))@DisplayNameHelper.GetDisplayName(nameof(ImageFileDTO.CreateDate), typeof(ImageFileDTO))@DisplayNameHelper.GetDisplayName(nameof(ImageFileDTO.FileSize), typeof(ImageFileDTO))Action
ID@DisplayNameHelper.GetDisplayName(nameof(ImageFileDTO.FileName), typeof(ImageFileDTO))@DisplayNameHelper.GetDisplayName(nameof(ImageFileDTO.FileSize), typeof(ImageFileDTO))@DisplayNameHelper.GetDisplayName(nameof(ImageFileDTO.CreateDate), typeof(ImageFileDTO))Action
+
+ +@section Scripts { + +} diff --git a/src/WorkFlowCheck.Web/Pages/BaseStock/ImageFiles/ImageFilesPage.cshtml.cs b/src/WorkFlowCheck.Web/Pages/BaseStock/ImageFiles/ImageFilesPage.cshtml.cs new file mode 100644 index 0000000..9db89d8 --- /dev/null +++ b/src/WorkFlowCheck.Web/Pages/BaseStock/ImageFiles/ImageFilesPage.cshtml.cs @@ -0,0 +1,47 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using WorkFlowCheck.Web.Services.Interfaces; + +namespace WorkFlowCheck.Web.Pages.BaseStock.ImageFiles +{ + [Authorize] + public class ImageFilesPageModel : PageModel + { + private readonly ILogger _logger; + private readonly ISystemService _systemService; + public ImageFilesPageModel(ILogger logger, ISystemService systemService) + { + _logger = logger; + _systemService = systemService; + } + public async Task OnGet() + { + } + public async Task OnGetLoadImageFiles() + { + var results = await _systemService.GetAllImageFilesAsync(); + return new JsonResult(new { data = results }); + } + public async Task OnGetDownloadFile(string filename) + { + var response = await _systemService.DownloadFile(filename); + + + if (response.IsSuccess) + { + + var result = new FileContentResult(response.Data, "application/octet-stream") + { + FileDownloadName = filename, + FileContents = response.Data + }; + return result; + } + else + { + return new JsonResult(new { success = false }); + } + } + } +} diff --git a/src/WorkFlowCheck.Web/Pages/Shared/_Layout.cshtml b/src/WorkFlowCheck.Web/Pages/Shared/_Layout.cshtml index 4788d58..61fbd33 100644 --- a/src/WorkFlowCheck.Web/Pages/Shared/_Layout.cshtml +++ b/src/WorkFlowCheck.Web/Pages/Shared/_Layout.cshtml @@ -36,6 +36,8 @@
  • Ellenőrzési pontok
  • Berendezések
  • Lokációk
  • +
  • +
  • Fényképek