@namespace WtmBlazorUtils @inherits WTComponent @inject WtmBlazorContext WtmBlazor @using System.Threading; @using System.Linq.Expressions; @using System.IO; @typeparam TValue @code{ [Parameter] public int? ThumbWidth { get; set; } [Parameter] public int? ThumbHeight { get; set; } [Parameter] public TValue Value { get; set; } [Parameter] public EventCallback ValueChanged { get; set; } [Parameter] public Expression> ValueExpression { get; set; } [Parameter] public string LabelText { get; set; } private Dictionary files { get; set; } = new Dictionary(); private List dlist = new List(); private ButtonUpload uploader { get; set; } protected TValue CurrentValue { get => Value; set { var hasChanged = !EqualityComparer.Default.Equals(value, Value); if (hasChanged) { Value = value; _ = ValueChanged.InvokeAsync(value); } } } private async Task OnAvatarUpload(UploadFile file) { bool suc = false; if (file != null && file.File != null) { byte[] filedata = await GetFileData(file.File); var rv = await WtmBlazor.Api.CallAPI("/api/_file/Upload", HttpMethodEnum.POST, null, filedata, file.File.Name); if (rv.StatusCode == System.Net.HttpStatusCode.OK) { var idstr = files.Select(x => x.Key); foreach (var id in idstr) { _ = await WtmBlazor.Api.CallAPI($"/api/_file/DeletedFile/{idstr}"); files.Remove(id); } files.Add(rv.Data.Fields["Id"].ToString(), file.File.Name); CurrentValue = (TValue)(object)(files.First().Key); suc = true; } } if (suc == false) { await WtmBlazor.Toast.Error(content: WtmBlazor.Localizer["Sys.UploadFailed"]); } } private async Task OnAvatarDelete(UploadFile file) { var idstr = files.Where(x => x.Value == file.OriginFileName).Select(x => x.Key).FirstOrDefault(); if (idstr != null) { var rv = await WtmBlazor.Api.CallAPI($"/api/_file/DeletedFile/{idstr}"); files.Remove(idstr); } return true; } private bool CheckValidAvatarFormat(string format) { return "jpg;png;bmp;gif;jpeg".Split(';').Any(f => format.Contains(f, StringComparison.OrdinalIgnoreCase)); } private async Task GetFileData(IBrowserFile file) { using var fileStream = file.OpenReadStream(WtmBlazor.ConfigInfo.FileUploadOptions.UploadLimit); using var memoryStream = new MemoryStream(); await fileStream.CopyToAsync(memoryStream); byte[] rv = memoryStream.ToArray(); memoryStream.Dispose(); fileStream.Dispose(); return rv; } }