📄 MatDenDagen/Components/Pages/UploadTest.razor
@page "/upload-test"
@using System.IO
@using MatDenDagen.Infrastructure.Storage.BlobStorage
@using Microsoft.AspNetCore.Http
@using System.Runtime.CompilerServices
@using Microsoft.AspNetCore.Mvc.Infrastructure
@using System.Threading
@inject BlobStorageService blobService
@implements IDisposable

<EditForm FormName="UploadTest" Model="@model" OnSubmit="@Submit" enctype="multipart/form-data" Enhance>
  <p>
    <label>
      <span>Fil:</span>
      <InputFile name="model.File" required />
    </label>
  </p>
  <p>
    <input type="submit" value="Ladda upp" />
  </p>
</EditForm>

@if (uploadedId is not null) {
  <p>Filen har id: <code>@uploadedId</code></p>
}

@code {
  private readonly CancellationTokenSource cts = new();

  [SupplyParameterFromForm]
  private UploadTestModel? model { get; set; } = new();

  private string? uploadedId { get; set; }
  
  private async Task Submit()
  {
    if (model?.File is not { } file)
    {
      return;
    }

    var result = await blobService.SaveBlob(file.OpenReadStream(), cts.Token);
    uploadedId = result.Id;
  }

  public void Dispose()
  {
    cts.Cancel();
    cts.Dispose();
  }

  private sealed class UploadTestModel
  {
    public IFormFile? File { get; set; }
  }
}