@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();
}
}
}