Files

53 lines
1.5 KiB
C#

using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using OpenArchival.DataAccess; // Assuming your DbContext or service is here
[Route("api/[controller]")]
[ApiController]
public class FilesController : ControllerBase
{
// Inject your database context or a service to find file paths
private readonly IDbContextFactory<ApplicationDbContext> _context;
public FilesController(IDbContextFactory<ApplicationDbContext> dbFactory)
{
_context = dbFactory;
}
[HttpGet("{id}")]
public async Task<IActionResult> GetFile(int id)
{
await using var context = await _context.CreateDbContextAsync();
FilePathListing fileRecord = await context.ArtifactFilePaths.FindAsync(id);
if (fileRecord == null)
{
return NotFound();
}
var physicalPath = fileRecord.Path;
if (!System.IO.File.Exists(physicalPath))
{
return NotFound();
}
var fileStream = new FileStream(physicalPath, FileMode.Open, FileAccess.Read);
return new FileStreamResult(fileStream, GetMimeType(physicalPath));
}
private static string GetMimeType(string filePath)
{
var extension = Path.GetExtension(filePath).ToLowerInvariant();
return extension switch
{
".jpg" => "image/jpeg",
".jpeg" => "image/jpeg",
".png" => "image/png",
".gif" => "image/gif",
_ => "application/octet-stream", // Default for unknown file types
};
}
}