Good day,
I trust you well, please assist on the below, I have a secured mailer project built in blazer, and I am implementing logic to accommodate different file types by adding an additional encryption library, but problem seems to be related to the EventCallback.FromDelegate(OnChanged) syntax which I have been trying to fix with no success, please see below
<Field Horizontal Padding="Padding.Is1"><FieldLabel ColumnSize="ColumnSize.Is2">Document:</FieldLabel><FieldBody ColumnSize="ColumnSize.Is10"><Field><FileEdit @ref="fileEdit" Placeholder="Upload pdf or xlsx files that are not more than 5MB each..." AutoReset="false" Multiple Changed="EventCallback<ChangeEventArgs>.FromDelegate(OnChanged)" Filter=".pdf, .xlsx" MaxFileSize="5000000" /> @if (EmailMessageDetails?.Attachments?.Any() == true) {<ListGroup class="list-group-item"> @foreach (var attachment in EmailMessageDetails.Attachments) {<ListGroupItem class="list-group-item"><i class="fa-solid fa-circle-check icon-color"></i> @attachment.FileName attached...</ListGroupItem> }</ListGroup> }</Field></FieldBody></Field>I also tried to correcting the correspondence of the partial class like below, just gives me more errors please help,
private async Task OnChanged(FileChangedEventArgs e) { foreach (var file in e.Files) { using var stream = file.OpenReadStream(); var memoryStream = new MemoryStream(); await stream.CopyToAsync(memoryStream); EmailMessageDetails.Attachments.Add(new Attachment { FileName = file.Name, FileContent = memoryStream.ToArray() }); } StateHasChanged(); } private async Task OnSave(SecureMailViewModel viewModel, bool save) { _isSending = true; if (_secureMailValidationsRef != null && _secureMailValidationsRef.ValidateAll()) { await SecureMailHepler.SaveOrSendEmail(viewModel, EmailMessageDetails, save); } _isSending = false; } private async Task OnSaveAndSend(SecureMailViewModel viewModel) { await OnSave(viewModel, false); } private void BackToList() { NavigationManager.NavigateTo("/securemail-list"); } }}Thank you
I updated the partial class, to resolve the event call back from:
public async Task OnChanged(FileChangedEventArgs e, SpreadsheetDocumentType spreadsheetDocumentType) { try { foreach (var file in e.Files.Select((value, i) => new { i, value })) { using (MemoryStream ms = new MemoryStream()) { await file.value.OpenReadStream(long.MaxValue).CopyToAsync(ms); if (file.value.Type.Contains("pdf", StringComparison.OrdinalIgnoreCase)) { await EncryptPdf(ms, file.value); var fileStream = new FileStream($"{_folderToWriteTo}Protected_doc_{file.value.Name}", FileMode.Open, FileAccess.Read, FileShare.Read); streams.Add(fileStream); } else if (file.value.Type.Contains("xlsx", StringComparison.OrdinalIgnoreCase)) { using (SpreadsheetDocument document = SpreadsheetDocument.Open(ms, true)) { await EncryptPdf(ms, file.value); var fileStream = new FileStream($"{_folderToWriteTo}Protected_doc_{file.value.Name}", FileMode.Open, FileAccess.Read, FileShare.Read); streams.Add(fileStream); } } { _toastService?.ShowWarning("Only PDF and XLSX files are supported."); await fileEdit.Reset().AsTask(); return; //var memStream = new MemoryStream(); //ms.Position = 0; //await ms.CopyToAsync(memStream); //streams.Add(memStream); } var formFie = new FormFile(streams[file.i], 0, streams[file.i].Length, file.value.Type, file.value.Name) { Headers = new HeaderDictionary(), ContentType = file.value.Type }; EmailMessageDetails.Attachments.Add(formFie); } } } catch (Exception exc) { _toastService?.ShowError($"An error occured while processing your request"); }To:
private async Task OnChanged(FileChangedEventArgs e) { foreach (var file in e.Files) { using var stream = file.OpenReadStream(); var memoryStream = new MemoryStream(); await stream.CopyToAsync(memoryStream); EmailMessageDetails.Attachments.Add(new Attachment { FileName = file.Name, FileContent = memoryStream.ToArray() }); } StateHasChanged(); } private async Task OnSave(SecureMailViewModel viewModel, bool save) { _isSending = true; if (_secureMailValidationsRef != null && _secureMailValidationsRef.ValidateAll()) { await SecureMailHepler.SaveOrSendEmail(viewModel, EmailMessageDetails, save); } _isSending = false; } private async Task OnSaveAndSend(SecureMailViewModel viewModel) { await OnSave(viewModel, false); } private void BackToList() { NavigationManager.NavigateTo("/securemail-list"); } }}