@inject IJSRuntime JS @inject State State @inject RestService api
@code { // private IBrowserFile? File { get; set; } private FileResult? File { get; set; } private string? Base64File { get; set; } private long? FileSize { get; set; } private string? Base64Url { get { if(File == null || Base64File == null) return null; return $"data:{File.ContentType};base64,{Base64File}"; } } private string Description { get; set; } private bool loading = false; [Parameter] public string id { get; set; } public async Task PostPic() { loading = true; await InvokeAsync(StateHasChanged); PutPicResponseData? response = await api.PutPic(State.SelectedAddressName, File); if(!string.IsNullOrEmpty(Description) && response != null && !string.IsNullOrEmpty(response.Id)) { await api.PostPicDescription(State.SelectedAddressName, response.Id, Description); await State.RefreshPics(); await InvokeAsync(StateHasChanged); } await JS.InvokeVoidAsync("ui", "#" + id); // clear input File = null; Description = string.Empty; loading = false; await InvokeAsync(StateHasChanged); } // private async Task ChangeFile(InputFileChangeEventArgs e){ // File = e.File; // } 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() { FileSize = await Utilities.FileSize(File); Base64File = await Utilities.Base64FromFile(File); } }