using Microsoft.AspNetCore.Mvc; namespace VirtualTask.Controllers { [Route("foto")] public class FotoController : Controller { private readonly string _rootPath = "/mnt/storagebox"; [HttpGet("{folder}/{fileName}")] public IActionResult ShowOrServe(string folder, string fileName) { if (string.IsNullOrEmpty(folder) || string.IsNullOrEmpty(fileName)) return Content("Parametri non validi"); var safeFolder = Path.GetFileName(folder); // sicurezza var safeFileName = Path.GetFileName(fileName); // Percorso: /mnt/storagebox/{folder}/PHOTO/{fileName} var filePath = Path.Combine(_rootPath, safeFolder, "PHOTO", safeFileName); //SOLO PER TEST!!!!!! //filePath = "C:\\DATI\\V000000009_2.jpg"; if (!System.IO.File.Exists(filePath)) return NotFound("File non trovato"); //var acceptHeader = Request.Headers["Accept"].ToString(); //if (!string.IsNullOrEmpty(acceptHeader) && acceptHeader.Contains("image")) //{ // // rileva content-type dinamico // var ext = Path.GetExtension(safeFileName).ToLowerInvariant(); // var contentType = ext switch // { // ".png" => "image/png", // ".webp" => "image/webp", // ".jpg" or ".jpeg" => "image/jpeg", // _ => "application/octet-stream" // }; // var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read); // return File(stream, contentType); //} // Se non è richiesta immagine → mostra view Razor ViewBag.Folder = safeFolder; ViewBag.FileName = safeFileName; return View("ShowImage"); } // Endpoint che restituisce il file binario, usato dentro la view [HttpGet("raw/{folder}/{fileName}")] public IActionResult RawImage(string folder, string fileName) { var safeFolder = Path.GetFileName(folder); var safeFileName = Path.GetFileName(fileName); var filePath = Path.Combine(_rootPath, safeFolder, "PHOTO", safeFileName); //SOLO PER TEST!!!!!! //filePath = "C:\\DATI\\V000000009_2.jpg"; if (!System.IO.File.Exists(filePath)) return NotFound("File non trovato"); var ext = Path.GetExtension(safeFileName).ToLowerInvariant(); var contentType = ext switch { ".png" => "image/png", ".jpg" or ".jpeg" => "image/jpeg", ".webp" => "image/webp", _ => "application/octet-stream" }; var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read); return File(stream, contentType); } } }