using Application.Features.FileImageManager.Commands; using Application.Features.FileImageManager.Queries; using ASPNET.BackEnd.Common.Base; using ASPNET.BackEnd.Common.Models; using Infrastructure.FileImageManager; using MediatR; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace ASPNET.BackEnd.Controllers; [Route("api/[controller]")] public class FileImageController : BaseApiController { public FileImageController(ISender sender) : base(sender) { } [Authorize] [HttpPost("UploadImage")] public async Task> UploadImageAsync(IFormFile file, CancellationToken cancellationToken) { if (file == null || file.Length == 0) { return BadRequest("Invalid file."); } using (var memoryStream = new MemoryStream()) { await file.CopyToAsync(memoryStream, cancellationToken); var fileData = memoryStream.ToArray(); var extension = Path.GetExtension(file.FileName).TrimStart('.'); var command = new CreateImageRequest { OriginalFileName = file.FileName, Extension = extension, Data = fileData, Size = fileData.Length }; var result = await _sender.Send(command, cancellationToken); if (result?.ImageName == null) { return StatusCode(500, "An error occurred while uploading the image."); } return Ok(new ApiSuccessResult { Code = StatusCodes.Status200OK, Message = $"Success executing {nameof(UploadImageAsync)}", Content = result }); } } [Authorize] [HttpGet("GetImage")] public async Task GetImageAsync( [FromQuery] string imageName, CancellationToken cancellationToken) { if (string.IsNullOrEmpty(imageName) || Path.GetExtension(imageName) == string.Empty) { imageName = "noimage.png"; } var request = new GetImageRequest { ImageName = imageName }; var result = await _sender.Send(request, cancellationToken); if (result?.Data == null) { return NotFound("Image not found."); } var extension = Path.GetExtension(imageName).ToLower(); var mimeType = FileImageHelper.GetMimeType(extension); return File(result.Data, mimeType); } }