38 lines
No EOL
1.1 KiB
C#
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);
|
|
}
|
|
} |