VirtualTask/Controllers/FotoController.cs

87 lines
2.9 KiB
C#

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);
}
}
}