@inject IJSRuntime JS @inject State State @inject RestService api @inject NavigationManager navigationManager
Share a picture
@*
*@
@if(Base64File != null && FileSize != null){ @FileContentType (@formatSizeUnits(FileSize)) }
@code { // private IBrowserFile? File { get; set; } [Parameter] public string? Base64File { get; set; } [Parameter] public long? FileSize { get; set; } [Parameter] public string? FileContentType { get; set; } [Parameter] public string? Description { get; set; } [Parameter] public string id { get; set; } [Parameter] public bool Active { get; set; } private bool loading = false; private FileResult? File { get; set; } private string? Base64Url { get { if (FileContentType == null || Base64File == null) return null; return $"data:{FileContentType};base64,{Base64File}"; } } public async Task PostPic() { loading = true; await InvokeAsync(StateHasChanged); PutPicResponseData? response = await api.PutPic(State.SelectedAddressName, Base64File); if(!string.IsNullOrEmpty(Description) && response != null && !string.IsNullOrEmpty(response.Id)) { await api.PostPicDescription(State.SelectedAddressName, response.Id, Description); await State.RefreshPics(); State.SendRefresh(); await InvokeAsync(StateHasChanged); } await JS.InvokeVoidAsync("ui", "#" + id); // clear input File = null; Description = string.Empty; loading = false; await InvokeAsync(StateHasChanged); } private string formatSizeUnits(long? bytes){ if(bytes == null) return "?? bytes"; string formatted = "0 bytes"; if (bytes >= 1073741824) { formatted = $"{(bytes / 1073741824):.##} GB"; } else if (bytes >= 1048576) { formatted = $"{(bytes / 1048576):.##} MB"; } else if (bytes >= 1024) { formatted = $"{(bytes / 1024):.##} KB"; } else if (bytes > 1) { formatted = $"{bytes} bytes"; } else if (bytes == 1) { formatted = $"{bytes} byte"; } return formatted; } private async Task PicFromMedia(EventArgs e) { File = await MediaPicker.Default.PickPhotoAsync(); await PopulateFileDetails(); } private async Task PicFromPhoto(EventArgs e) { File = await MediaPicker.Default.CapturePhotoAsync(); await PopulateFileDetails(); } private async Task PopulateFileDetails() { FileContentType = File.ContentType; FileSize = await Utilities.FileSize(File); Base64File = await Utilities.Base64FromFile(File); } }