@page "/" @using System.Net.Http.Headers @using Microsoft.Extensions.Configuration @implements IAsyncDisposable @inject HttpClient Http @inject IJSRuntime JS @inject IConfiguration Configuration Upload your form
You must be signed in to upload your form
@code { private IJSObjectReference? _module; private bool _buttonsDisable = true; private bool _fileSelectionDisable = false; private Guid _inputFileGuid = Guid.NewGuid(); private InputFile? inputFile; private IBrowserFile? _imageFile; protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) { _module = await JS.InvokeAsync("import", "./Pages/Upload.razor.js"); } await base.OnAfterRenderAsync(firstRender); } private async Task GetPresignedUrl() { var request = new HttpRequestMessage() { Method = HttpMethod.Get, RequestUri = new Uri(Configuration["GetPresignedUrl"]) }; request.SetBrowserRequestCredentials(BrowserRequestCredentials.Include); var response = await Http.SendAsync(request); string presignedUrl = await response.Content.ReadAsStringAsync(); return presignedUrl; } private async Task OnResetClick() { await Reset(); } private async Task Reset() { _buttonsDisable = true; if (inputFile is not null) { _inputFileGuid = Guid.NewGuid(); } if (_module is not null) { await _module.InvokeVoidAsync("resetImage", "selectedImage"); } if(_imageFile is not null) { _imageFile = null; } } private async Task OnUploadClick() { if (_imageFile != null) { string presignedUrl = await GetPresignedUrl(); using (Stream imageStream = _imageFile.OpenReadStream()) { HttpContent content = new StreamContent(imageStream); content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); var response = await Http.PutAsync(presignedUrl, content); if (response.IsSuccessStatusCode) { await Reset(); } } } } private async Task LoadFile(InputFileChangeEventArgs e) { _buttonsDisable = false; _imageFile = e.File; using (DotNetStreamReference dotnetImageStream = new DotNetStreamReference(_imageFile.OpenReadStream())) { if (_module is not null) { await _module.InvokeVoidAsync("setImageUsingStreaming", "selectedImage", dotnetImageStream); } } } async ValueTask IAsyncDisposable.DisposeAsync() { if (_module is not null) { await _module.InvokeVoidAsync("disposeUrl"); await _module.DisposeAsync(); } } }