Mizuki/Controllers/ServeController.cs
2025-01-13 00:11:40 +01:00

38 lines
No EOL
1.1 KiB
C#

using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.AspNetCore.Mvc;
using Mizuki.Services;
namespace Mizuki.Controllers;
/// <summary>
/// The controller serving the uploaded files.
/// </summary>
[ApiController]
[Route("/f")]
public class ServeController(
DriveService driveService,
UploadService uploadService) : ControllerBase
{
/// <summary>
/// Tries to get the file by its filename.
/// </summary>
/// <param name="filename">The filename.</param>
/// <returns>The file, or an error.</returns>
[Route("{filename}")]
[HttpGet]
public async Task<Results<FileStreamHttpResult, NotFound>> GetFile(
[FromRoute] string filename)
{
var file = await uploadService.GetByFilename(filename);
if (file is null)
return TypedResults.NotFound();
var stream = driveService.OpenFileByFilename(filename);
if (stream is null)
return TypedResults.NotFound();
return TypedResults.File(
stream,
fileDownloadName: file.OriginalFilename);
}
}