دریافت صورتحساب @inject IJSRuntime JS @inject HttpClientController hc; @page "/InvoiceReport/{ExternalAccessCode}" @using Front.Services @code { [Inject] protected PreloadService PreloadService { get; set; } = default!; List messages = new List(); [Parameter] public string ExternalAccessCode { get; set; } protected async override Task OnParametersSetAsync() { if (!string.IsNullOrEmpty(ExternalAccessCode)) ShowReport(); await base.OnParametersSetAsync(); } } @functions { private void ShowMessage(ToastType toastType, string msg) => messages.Add(CreateToastMessage(toastType, msg)); private ToastMessage CreateToastMessage(ToastType toastType, string msg) => new ToastMessage { Type = toastType, Message = msg, }; private async Task ShowReport() { PreloadService.Show(SpinnerColor.Dark); var rsp = await hc.Get($"Invoice/GetReportByExternalAccessCode/{ExternalAccessCode}"); if (rsp.IsSuccessStatusCode) { var str = await rsp.Content.ReadAsStringAsync(); if (string.IsNullOrEmpty(str)) ShowMessage(ToastType.Warning, "مشکلی در ساخت فایل رخ داده لطفا مجدد تلاش کنید"); else await DownloadFileFromStream(str, $"{ExternalAccessCode}.pdf"); } else if (rsp.StatusCode == System.Net.HttpStatusCode.NotFound) ShowMessage(ToastType.Warning, "فاکتوری یافت نشد"); else ShowMessage(ToastType.Warning, "خطایی در چاپ فاکتور"); PreloadService.Hide(); } //for download private Stream GetFileStream(byte[] bytes) { var fileStream = new MemoryStream(bytes); return fileStream; } private async Task DownloadFileFromStream(string Base64, string FileName) { byte[] bytes = System.Convert.FromBase64String(Base64); var fileStream = GetFileStream(bytes); // var fileName = "log.bin"; using var streamRef = new DotNetStreamReference(stream: fileStream); await JS.InvokeVoidAsync("downloadFileFromStream", FileName, streamRef); } }